Reladomo is an enterprise grade object-relational mapping framework for Java.

Overview

Reladomo

What is it?

Reladomo is an object-relational mapping (ORM) framework for Java with the following enterprise features:

  • Strongly typed compile-time checked query language
  • Bi-temporal chaining
  • Transparent multi-schema support
  • Full support for unit-testable code
  • See the documentation for more detail.

What can I do with it?

  • Model data as objects with meaningful relationships between them
  • Define classes and relationships using simple XML files
  • Traverse, query, fetch, and update graphs of objects in an idiomatic object-oriented way
  • Manage bi-temporal data using built-in methods
  • Define, create, query, and update data that has both business date and processing date axes
  • Maintain complete and accurate audit history of changes efficiently
  • Answer as-of questions such as "what did this object look like at the end of last quarter"
  • Build applications as diverse as interactive web-apps to batch-processing
  • Leverage transactions and batch operations to support high-performance throughput
  • Detach objects to allow users to change data off-line
  • Write database vendor-independent code

Detailed feature list

  • Strongly typed compile-time checked query language
  • Audit-only, Business time-series only, and Bi-temporal chaining
  • Transparent multi-schema support (partition data across many databases)
  • Object-oriented batch operations
  • Flexible object relationship inflation
  • Detached objects (allow data to be changed independently (a.k.a. delayed edit functionality) of the DB and then pushed (or reset) as and when required) - useful when users are editing data in a GUI form
  • Multi-Threaded matcher Loader (MTLoader) is a high-performance pattern for merging changes from another source (file, feed, other DB, etc.) to your existing DB data. By design it is flexible/customizable and re-runnable
  • Tunable caching by object type - partial, full, full off-heap
  • Available meta-data - enables higher-level programming paradigms
  • Multi-tier operation - obviates the need for direct DB access from client-side apps, enables better connection sharing, with no code changes required
  • Full support for unit-testable code
  • Databases supported include: Sybase (ASE & IQ), DB2, Oracle, Postgres, MS-SQL, H2, Derby, "generic" ...

Sample Project

To help getting started with Reladomo, a simple project is available with maven and gradle build set-up.

Prerequisite: install maven or gradle.

git clone https://github.com/goldmansachs/reladomo.git
cd samples/reladomo-sample-simple

Maven

mvn clean install

Gradle

gradle clean build

Once build is successful, run src/main/java/sample/HelloReladomoApp to see how it behaves.

Documentation

Documentation is available online and also included within the Reladomo Javadoc jar file. Extract the jar file and refer to the docs below.

Reference Description File Path
Tutorial This tutorial demonstrates the necessary steps to get your Reladomo project started. userguide/ReladomoTutorial.html
FAQ Reladomo FAQ mithrafaq/ReladomoFaq.html
Reladomo Test Resource This document explains the steps required to use Reladomo objects in unit tests. mithraTestResource/ReladomoTestResource.html
Reladomo Notification When you have multiple JVMs connecting to a DB via Reladomo, you need to keep each JVM up-to-date with changes made by any of the other JVMs. Reladomo Notification is the primary mechanism for achieving this and keeping each JVMs Reladomo cache fresh. notification/Notification.html
Reladomo Primary Key Generator Primary key generator is an optional feature in Reladomo that allows Reladomo objects to declare how the primary key is going to be generated. primaryKeyGenerator/PrimaryKeyGenerator.html
Reladomo Database Definition Generators Database definition language (DDL) file generation is an optional feature in Reladomo that allows users to generate scripts to create tables, indices and foreign keys from the Reladomo object definition XML files. mithraddl/ReladomoDdlGenerator.html
Reladomo Object XML Generator To expedite the creation of object XML files from existing schema, an object XML file generator has been created. It connects directly to a database, retrieving a list of the existing tables and generating object XML files that appropriately map to these tables. objectxmlgenerator/Generator.html
Visualize Domain Model Using Reladomo Metadata When a persistent set of objects is specified in Reladomo metadata, the objects can be visualized. The output can be used as documentation, or simply browsed through to gain understanding of the domain. visualization/ReladomoVisualization.html
Reladomo Architecture Reladomo internal architecture. architecture/ReladomoInternalArchitecture.html
Presentations Reladomo presentation materials. presentations

Acquiring Reladomo

Comments
  • Add Eclipse Collections as a dependency.

    Add Eclipse Collections as a dependency.

    • Add Eclipse Collections as a dependency
    • Add a flag to generate asEcList() method
    • Made Selectors extend EC Function so that uses have a choice to use Reladomo selectors with Eclipse Collections
    opened by itohro 15
  • Read with txParticipation=readOnly and write in same Application

    Read with txParticipation=readOnly and write in same Application

    Hi, Sorry for posting my question in the issue section, but i had an issue that i am stuck at for some time now so wanted to check if anybody could kindly provide any help here. We are working on creating a purge application that runs throughout the day. We fetch objects using the listCursor and for each x rows, check if they meet certain criteria and delete. We stop purge and also stop fetching data using the cursor(but do not close the cursor ,effectively pausing the cursor )if the database is busy or if other processes are running. I was looking to find a way such that the read from the listCursor would be in readOnly mode so it does not hold on to any locks(this is currently blocking other processes even thought the cursor is paused and not fetching any data) and the delete's can happen in the same JVM. Since we declare txParticpation at the connection level, it would not let me do it currently. Could someone please suggest if there is a way i can specify txParticpation at query level or if could have 2 connection managers for an application so i could use the listCursor in readOnly mode and run the delete's using the second connection manager or if there is any other way to tackle this problem. Please let me know if you need any other details.

    Thanks

    opened by salilrr 13
  • Caching with Relationships

    Caching with Relationships

    I want to completely disable caching - I know this will be a performance hit but our table sizes are small and we'll re-enable the caching once we configure the TCP Notification Server and have tested it in our environment/ with redundancy etc.

    So, to disable the caching I set cacheType = none as follows and sure enough I see all application finds going to the db (sql logs and profiler show that)

     <MithraObjectConfiguration
      className="com.greenhedges.Account" cacheType="none"/>
    
     <MithraObjectConfiguration
      className="com.greenhedges.AccountAgreement" cacheType="none"/>
    

    My issue is the one-to-many relationship are not refetched/queried from the db each time - e.g. say an Account can have n number of AccountAgreements:

    <MithraObject objectType="transactional">
    <PackageName>com.greenhedges</PackageName>
        <ClassName>Account</ClassName>
        <DefaultTable>account</DefaultTable>
    ...
        <Relationship name="aggreements" relatedObject="AccountAgreement" cardinality="one-to-many" relatedIsDependent="true">
             AccountAgreement.id = this.id
        </Relationship>
    </MithraObject>
    

    Is there a way to force the relatedObjects to be reloaded always?

    opened by spudmcq 10
  • Getting exception when tried to join a table with equalsEdgePoint()

    Getting exception when tried to join a table with equalsEdgePoint()

    Getting below exception when tried to join table with equalsEdgePoint().

    Sample Reladomo Query: DocumentFinder.authors().processingDate().equalsEdgePoint() .and(DocumentFinder.authors().processingDateTo().greaterThan())

    Exception : can't join with non-standard as-operation com.gs.fw.common.mithra.finder.asofop.AsOfEdgePointOperation processingDate

    opened by prdsharma 9
  • Add Eclipse Collections as a dependency.

    Add Eclipse Collections as a dependency.

    There are couple of open issues I want to consult with @gs-rezaem . Please kindly advise.

    • In #30 , Moh suggested to try getting rid of GSC impl dependency, but there are too many dependencies for FastList/UnifiedSet/UnifiedMap as internal storage, so I left them as is for now.
    • In #30, Moh suggested below for ByteArraySet, but this caused conflict in get(Object) and get(K), also signature conflict in collect(). So I didn't touch this class for now. Please advise how you want to handle this class.

    For ByteArraySet, extend the EC UnifiedSetWithHS and implement GSC MutableMap.

    • MithraFastList and AdhocFastList extend FastList. Please advise how you want to handle these classes.
    • AbstractDatedCache.MatchAllAsOfDatesProcedureForMany#getResult() returns FastList. Please advise how you want to handle this.
    • MasterSyncResult#getBuffers() returns FastList. Please advise how you want to handle this.
    • MithraCompositeList#getLists() returns FastList. Please advise how you want to handle this.
    • AsOfEqualityChecker#getMsiPool() returns UnifiedMap. Please advise how you want to handle this.
    • ConcurrentIntObjectHashMap#parallelForEachValue() takes List<IntObjectProcedure<V>> in its signature. Introducing EC equivalent method would cause same erasure issue. Please advise how you want to handle this.
    • ListFactory has couple of create() methods that return FixedSizeList. We can either have GSC version or EC version for this class. Making it EC version may cause wide impact as it's used widely in reladomo. Please advise how you want to handle this class.
    opened by itohiro73 8
  • Shared Schema Multi-tenancy

    Shared Schema Multi-tenancy

    Hi,

    I've been reviewing Reladomo for use in a project but see nothing about multi-tenancy.

    I plan on implementing shared schema tenancy by using row level security in PostgreSQL. My original plan before coming across Reloadomo was to set a connection parameter when the connection was grabbed for use. This was to be used in PostgreSQL via a table policy that checked the value compared the the column value stored essentially creating a virtual database.

    I think I can do the PostgreSQL part still and the connection parameter by overriding the getConnection in say the SourcelessConnectionManager.

    Where I get confused is with the Caching in Reladomo.

    I've read what I can on the caching and It would appear that there is a collection of indices and that matching an object in the cache must be done via a match with "=" or "in". So if the tenant id was part of an index this may work?

    Is there a way I can do what I want to do? How would one use Reladomo for multi-tenancy?

    Any help would be greatly appreciated.

    opened by Zynde 8
  • Reladomo Object XML Generator -> Postgresql support

    Reladomo Object XML Generator -> Postgresql support

    Hi,

    https://goldmansachs.github.io/reladomo/objectxmlgenerator/Generator.html describes that the Reladomo Mithra XML generator (reverse generation from an existing database) is capable to connect "sybase" and "udb82" databases. Any "hard" reasons why this is the case ? Or asked differently - what is required to be able to connect e.g. postgresql ?

    Thank you. Best Regards, jj

    opened by ramtej 8
  • Tabs are there in generated sources as indentation

    Tabs are there in generated sources as indentation

    Tabs are there in entity source generated by reladomo. I found the indentation is hardcoded here, is it good to raise a pull request to change to spaces? or is there any other approach to the matter? Thanks.

    case1: codeFormat = default value (fast)

    here is the source of build.gradle:

    task genReladomo {
        ant.taskdef(name: "genReladomo",
                classpath: configurations.reladomoGenTask.asPath,
                classname: "com.gs.fw.common.mithra.generator.MithraGenerator")
        ant.genReladomo(xml: "$projectDir/src/main/resources/reladomo/model/ReladomoClassList.xml",
                generateEcListMethod: "true",
                generatedDir: "$buildDir/generated-sources/reladomo",
                nonGeneratedDir: "$projectDir/src/main/java")
    }
    

    and here is one of the sources generated, with tabs as indentation.

    public class ChannelList extends ChannelListAbstract
    {
    	public ChannelList()
    	{
    		super();
    	}
    
    	public ChannelList(int initialSize)
    	{
    		super(initialSize);
    	}
    
    	public ChannelList(Collection c)
    	{
    		super(c);
    	}
    
    	public ChannelList(Operation operation)
    	{
    		super(operation);
    	}
    }
    

    case2: codeFormat = none

    here is the source of build.gradle, with parameter codeFormat specified as "none".

    task genReladomo {
        ant.taskdef(name: "genReladomo",
                classpath: configurations.reladomoGenTask.asPath,
                classname: "com.gs.fw.common.mithra.generator.MithraGenerator")
        ant.genReladomo(xml: "$projectDir/src/main/resources/reladomo/model/ReladomoClassList.xml",
                generateEcListMethod: "true",
                codeFormat: "none",
                generatedDir: "$buildDir/generated-sources/reladomo",
                nonGeneratedDir: "$projectDir/src/main/java")
    }
    

    indentation are gone, but 1 tab is there in another file generated, in the next line of "{".

    public class ChannelDatabaseObject extends ChannelDatabaseObjectAbstract
    {
    	
    
    }
    
    opened by KTONQ 7
  • Fixes for concurrent notification during deep fetch

    Fixes for concurrent notification during deep fetch

    Hi,

    I would be grateful if you could please review and consider accepting this bug fix, or let me know if you have any questions / feedback / changes required.

    This fix is for a race condition in deep fetch which causes inconsistent related objects to be returned in certain cases when concurrent updates arrive via notification events.

    This happens due to stale relationship query results in the partial cache that do not expire as they should, because the cache entries (CachedQuery objects) are stamped with update counters that were captured at the wrong time (i.e. after the database query completed, instead of before).

    I've added test cases which reproduced the issue and made these pass. An earlier version of this fix has also been tested in a real world application for over a month without any repeat of the original issue, which had previously been happening on a daily basis.

    The code changes should largely be self-explanatory but note that some additional classes had to be refactored slightly just to make it possible to inject a test harness around the deep fetch strategy under the test. I've also included a detailed step by step walkthrough below in case this helps to explain the mode of failure, since it was quite subtle and depended upon a chain of events. I also explained a bit more about the rationale behind the fix.

    Looking forward to your feedback.

    Thanks in advance, Andrew


    Detailed walkthrough of the issue and the approach to fix it:

    As an example to provide some context, suppose we have a table A which has a relationship to table B. We retrieve Table A using findMany, and we request a deep fetch of the related objects in table B. Both tables are partial-cached in Reladomo. We have two Reladomo JVMs running concurrently which are linked via notification events. One of these JVMs is performing read queries including deep fetch, and the other JVM is performing writes to the same tables and sending corresponding notification events.

    The race condition can occur if concurrent updates happen which bring additional parent objects (in table A) into scope of the finder query at the same time as the related objects (in table B) are being deep fetched from the database. The results of this database query on table B may not reflect the concurrent update to table A - in some cases because the query was optimised using an in-clause that was computed based on the original contents of table A, or because of a database join that got executed just prior to table A being updated. Note that the results of this deep fetch are actually correct, but the cache entry that is created for the related objects is tagged with the wrong update counter values and this causes the next deep fetch that happens later to return the wrong results.

    Specifically, the deep fetch strategy submits these results for the related objects (of table B) into the partial cache as a CachedQuery which it incorrectly stamps with the latest update counter values that were captured after the query was executed. This causes the CachedQuery to report that it is not expired because the update counter incorporates the latest notification events, even though the cached results do not reflect the latest state of the database.

    If the same finder query and deep fetch is subsequently executed again by the application at a later time, the additional parent objects (in table A) which came into scope will get returned by the findMany as expected, because it will requery table A in the database, but the corresponding related objects (in table B) will be missing from the deep fetch results because it will return the stale results from the cache.

    The fix is relatively straightforward. The deep fetch strategy should capture the update counters before the related object query is executed, rather than afterwards. This will cause the CachedQuery to correctly detect that it has expired, so there will be no cache hit for the related objects query, and the deep fetch strategy will correctly re-retrieve the related objects from the database, using the correct join (or in-clause) based on the latest set of parent objects, and therefore the deep fetch will return the complete set of related objects as expected.

    There is one other related type of race condition. In certain parts of the deep fetch logic we also need the related objects query to expire if the parent query has invalidated, since the change to the parent table may bring new objects into scope of the deep fetch, e.g. if the deep fetch strategy executed the related objects query as a 'simplified' query that uses an in-clause instead of a join. The fix for this issue is to enhance CachedQuery to be able to merge the update counters of the parent query with the update counters of the related objects query, taking account of the fact that these are two different operations which depend on different tables and hence depend on different update counter holders. This fix is also included as part of this pull request.

    opened by AndrewWyllie 7
  • MithraObjectXmlGenerator on MsSql - provide schema name parameter or ignore system schemas

    MithraObjectXmlGenerator on MsSql - provide schema name parameter or ignore system schemas

    There is no way to provide sql schema name for MithraObjectXmlGenerator (because of initializeSchemaOrCatalog method logic, "schemaName" variable is always null for SqlServer).

    SQL server database always contains system views and tables, so running MithraObjectXmlGenerator leads to processing all those system views and tables. In my sample DB there are 400 system views (INFORMATION_SCHEMA.* and sys.*) for 20 user tables, so the output of generator is nearly unusable (and on SqlServer 2012 generator actually throws exception trying to process sys.trace_xe_action_map table)

    The work around is to provide "includeTables" parameter, but for real db that list would be very long.

    opened by TMTHY 6
  • Bump h2 from 1.4.192 to 2.1.210 in /samples/reladomo-sample-simple

    Bump h2 from 1.4.192 to 2.1.210 in /samples/reladomo-sample-simple

    Bumps h2 from 1.4.192 to 2.1.210.

    Release notes

    Sourced from h2's releases.

    Version 2.1.210

    Two security vulnerabilities in H2 Console (CVE-2022-23221 and possible DNS rebinding attack) are fixed.

    Persistent databases created by H2 2.0.x don't need to be upgraded. Persistent databases created by H2 1.4.200 and older versions require export into SQL script with that old version and creation of a new database with the new version and execution of this script in it.

    ... (truncated)

    Commits
    • ca926f8 Merge remote-tracking branch 'h2database/master'
    • be306de Version advancement
    • 030eb72 Improve migration documentation
    • 86d58c4 Merge pull request #3381 from katzyn/legacy
    • b613598 Typo
    • d6e4eb8 Add IDENTITY() and SCOPE_IDENTITY() to LEGACY mode
    • 36e790d make javadoc happier
    • 1c0ca27 Add "of this server" to adminWebExternalNames text
    • 0f83f48 Convert host names to lower case
    • c5f11a5 Merge pull request #3378 from katzyn/lob
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 5
  • Problem with attribute quoting in ddl generation for h2.

    Problem with attribute quoting in ddl generation for h2.

    After upgrading to the latest version of Reladomo, I see the new attribute quoting behavior. I'm generating ddl files to disk using the postgres database type, and then I load them into h2 inside tests. I realize this might not be a valid thing to do, but it's always worked in the past and CoreMithraDbDefinitionGenerator#setDatabaseType doesn't have an option for h2. Should it?

    The quoting is happening a little differently in ddl files, idx files, and fk files.

    In ddl files, the quotes appear escaped with slashes. H2 doesn't seem to like this syntax.

    drop table if exists MYTYPE;
    
    create table MYTYPE
    (
        \"name\" varchar(256) not null,
        data varchar(100000) not null,
    );
    

    In fk files, there's no quoting. H2 is fine with this, at least for the identifier "name".

    references MYTYPE(
        name
    );
    

    In idx files, there's quoting with no slashes. H2 is fine with this too.

    alter table MYTYPE add constraint MYTYPE_PK primary key ("name");
    

    I stepped through AbstractGeneratorDatabaseType a bit and see the places where getColumnNameWithEscapedQuote() and getPlainColumnName() are called, and I'm happy to help with a fix, but I'm not confident I understand the issue.

    opened by motlin 2
  • how to build reladomo from IntelliJ/IDEA

    how to build reladomo from IntelliJ/IDEA

    I cloned reladomo code and imported the project into IntelliJ/IDEA.

    See the build errors below.

    missing libraries.

    import org.eclipse.collections.api.list.FixedSizeList; import org.eclipse.collections.impl.factory.Lists;

    Where is the JAR for above 2 Java classes located? Could you someone provide instructions on how to build the reladomo project in IntelliJ/IDEA?

    opened by greensuse 1
  • ObjectSequenceAbstract.java not found

    ObjectSequenceAbstract.java not found

    in the reladomo-sample-simple project, there is code like below

    public class ObjectSequence extends ObjectSequenceAbstract implements MithraSequence {

    where is the java class ObjectSequenceAbstract come from? I do not see it in master branch?

    opened by greensuse 1
  • Backward compatibility not preserved after changing the schema

    Backward compatibility not preserved after changing the schema

    If I update the existing XML schema file. The newly generated Finder class will generate a class with a new serialVersionId and thus breaking the Backward compatibility. https://github.com/goldmansachs/reladomo/blob/master/reladomogen/src/main/templates/readonly/Finder.jsp#L783

    opened by rootid 1
  • Improve sql logging by adding additional context.

    Improve sql logging by adding additional context.

    Reladomo's sql logging is so useful that I sometimes leave it turned on in production.

    DEBUG com.gs.fw.common.mithra.sqllogs.MyClass: connection:1030722971 find with: select t0.key,t0.number from MY_CLASS t0 where  t0.key = 'abcd' and t0.system_to = '9999-12-01 23:59:00.000'
    DEBUG com.gs.fw.common.mithra.sqllogs.MyClass: retrieved 1 objects, 2.0 ms per
    

    I have some ideas on how to make this logging even more useful.

    It's currently hard to log only sql, or only timings, without the other. That's because both log statements using the same logger, com.gs.fw.common.mithra.sqllogs.MyClass in this example. I propose adding markers for each.

    private static final Marker MARKER_SQL = MarkerFactory.getMarker("Reladomo SQL");
    private static final Marker MARKER_TIMING = MarkerFactory.getMarker("Reladomo Timing");
    

    And adding the markers to the relevant log statements. For example, change this:

    logger.debug("source '" + source + "': " + text);
    

    to

    logger.debug(MARKER_SQL, "source '" + source + "': " + text);
    

    In addition, the timing information could be even more useful if I didn't have to parse it out of the logged message. I propose adding the timing information to MDC. That way I more easily create dashboards of the amount of time spent on queries over time.

    For example, change this:

    this.sqlLogger.debug("retrieved " + this.rowCount + " objects, " +
            ((this.rowCount > 0) ? ((totalTime / this.rowCount) + " ms per") : (totalTime +
                    " ms")));
    

    to

    MDC.put("rowCount", String.valueOf(this.rowCount));
    MDC.put("totalTime", String.valueOf(totalTime));
    try
    {
        this.sqlLogger.debug(MARKER_TIMING, "retrieved " + this.rowCount + " objects, " + ((this.rowCount > 0) ? (totalTime / this.rowCount + " ms per") : (totalTime + " ms")));
    }
    finally
    {
        MDC.remove("rowCount");
        MDC.remove("totalTime");
    }
    

    I'm happy to contribute these changes but I wanted to discuss here before working on the whole thing.

    I'm starting with the assumption that changing the existing logging is undesirable because users already rely on the current behavior. So this proposal adds markers and MDC but doesn't change, remove, or combine any messages. What do you think?

    enhancement 
    opened by motlin 7
Releases(18.1.0)
  • 18.1.0(Feb 10, 2022)

    Change Log

    18.1.0 - 2022-02-09

    Enhancements:

    • Add MariaDB support to database definition generator
    • Auto quote columns that are SQL keywords or have spaces
      • Quoted identifiers are now forced to "on" at connection time to Sybase and MS SQL Server
    • Update to H2 2.1.210
      • This was a bigger change than expected. H2 2.x behaves quite differently from 1.x - It's a lot more strict regarding identifiers. This may cause issues with table names in unit tests. - Numerical computations can result in slightly different outcomes (e.g. rounding down vs up).
      • For unit tests, MODE=LEGACY is auto set for the in memory instance. The main use of this is the IDENTITY() function.
    • Update main dependencies: Eclipse Collections 11.0.0, Joda Time 2.10.13, slf4j 1.7.35.
    • Update serialization dependencies: gson 2.8.9, jackson-core 2.13.1.

    Bug Fixes:

    • Fix parsing large long values in test data files
    Source code(tar.gz)
    Source code(zip)
  • 18.0.0(Sep 6, 2020)

    Change Log

    18.0.0 - 2020-09-06

    Enhancements:

    • Switch to jdk8. Reladomo's mininum supported jdk is now JDK 8
    • Remove GSC collection. Eclipse collections is now the only supported part of the interface.
    • Initial implementation of GraphQL API
    • Change Strings to be quoted in the toString() representation of in-clause operations.
    • Only run off heap free thread when necessary.

    Bug Fixes:

    • Fix parameter tokenization with comma
    • Correct limit row count for MariaDB and Postgres.
    • Implement equals and hashCode() on Timestamp-part and Date-part Calculators.
    • Fix a bug in wild card expression parsing

    GAV

    com.goldmansachs.reladomo,reladomo,18.0.0 com.goldmansachs.reladomo,reladomogen,18.0.0 com.goldmansachs.reladomo,reladomo-serial,18.0.0 com.goldmansachs.reladomo,reladomo-xa,18.0.0 com.goldmansachs.reladomo,reladomo-graphql,18.0.0 com.goldmansachs.reladomo,reladomo-test-util,18.0.0 com.goldmansachs.reladomo,reladomo-gen-util,18.0.0

    Source code(tar.gz)
    Source code(zip)
  • 17.1.4(Nov 28, 2019)

    Change Log

    17.1.4 - 2019-11-28

    Bug Fixes:

    • Fix json deserialization for primitive attributes with "null"

    GAV

    com.goldmansachs.reladomo,reladomo,17.1.4 com.goldmansachs.reladomo,reladomogen,17.1.4 com.goldmansachs.reladomo,reladomo-serial,17.1.4 com.goldmansachs.reladomo,reladomo-test-util,17.1.4 com.goldmansachs.reladomo,reladomo-gen-util,17.1.4

    Source code(tar.gz)
    Source code(zip)
  • 17.1.3(Oct 16, 2019)

    17.1.3 - 2019-10-16

    Bug Fixes:

    • Fix json deserialization for to-many relationships

    GAV:

    com.goldmansachs.reladomo,reladomo,17.1.3 com.goldmansachs.reladomo,reladomogen,17.1.3 com.goldmansachs.reladomo,reladomo-serial,17.1.3 com.goldmansachs.reladomo,reladomo-test-util,17.1.3 com.goldmansachs.reladomo,reladomo-gen-util,17.1.3

    Source code(tar.gz)
    Source code(zip)
  • 17.1.2(Sep 19, 2019)

    17.1.2 - 2019-09-19

    Bug Fixes:

    • Fix json deserialization with nulls
    • Fix ArrayIndexOutOfBoundsException in MultiExtractorHashStrategy

    GAV:

    com.goldmansachs.reladomo,reladomo,17.1.2 com.goldmansachs.reladomo,reladomogen,17.1.2 com.goldmansachs.reladomo,reladomo-serial,17.1.2 com.goldmansachs.reladomo,reladomo-test-util,17.1.2 com.goldmansachs.reladomo,reladomo-gen-util,17.1.2

    Source code(tar.gz)
    Source code(zip)
  • 17.1.1(Sep 1, 2019)

    Change Log

    17.1.1 - 2019-09-01

    Bug Fixes:

    • Fix json deserialization without relationships

    GAV:

    com.goldmansachs.reladomo,reladomo,17.1.1 com.goldmansachs.reladomo,reladomogen,17.1.1 com.goldmansachs.reladomo,reladomo-serial,17.1.1 com.goldmansachs.reladomo,reladomo-test-util,17.1.1 com.goldmansachs.reladomo,reladomo-gen-util,17.1.1

    Source code(tar.gz)
    Source code(zip)
  • 17.1.0(Jul 16, 2019)

    17.1.0 - 2019-07-16

    Enhancements:

    • Add support for test file charset
    • Changed handling of the optimistic lock exception to support situations where the underlying data has duplicate record for the given milestone. In this case a MithraUniqueIndexViolationException exception will be trown and no retries will be made.
    • Better error message during code generation
    • Remove duplicated attribute "finalGetter" in type EmbeddedValueType. The same attribute (name and target namespace) is already defined in type NestedEmbeddedValueType

    Bug Fixes:

    • Fix deep fetch and query cache timing
    • Fix build failure caused by missing OpenJDK 6 dependency on Travis CI (#1)
    • Clean Notification Manager Shutdown
    • Fix attribute setters in inherited list classes
    • Fix code generation for class named Class. covered by: craig_motlin.dco
    • Fix superclass + interface combination
    • Multi threaded deep fetch exception handling
    • Fix the several typos detected by github.com/client9/misspell
    • Fix TXRollback for test

    GAV:

    com.goldmansachs.reladomo,reladomo,17.1.0 com.goldmansachs.reladomo,reladomogen,17.1.0 com.goldmansachs.reladomo,reladomo-serial,17.1.0 com.goldmansachs.reladomo,reladomo-test-util,17.1.0 com.goldmansachs.reladomo,reladomo-gen-util,17.1.0

    Source code(tar.gz)
    Source code(zip)
  • 17.0.2(May 10, 2018)

    17.0.2 - 2018-05-10

    Bug Fixes:

    • Fix MultiUpdateOperation combine method for increment
    • Preserve SerializationConfig's metadata status across builder calls.
    • Ignore as-of attributes when determining pass through direction for operations
    • Upgrade sample project to use Reladomo 17.0.1.

    GAV:

    com.goldmansachs.reladomo,reladomo,17.0.2 com.goldmansachs.reladomo,reladomogen,17.0.2 com.goldmansachs.reladomo,reladomo-serial,17.0.2 com.goldmansachs.reladomo,reladomo-test-util,17.0.2 com.goldmansachs.reladomo,reladomo-gen-util,17.0.2

    Source code(tar.gz)
    Source code(zip)
  • 17.0.1(Mar 12, 2018)

    17.0.1 - 2018-03-12

    Note: this releases fixes a serious regression introduced in 16.7.0

    Enhancements:

    • Add connection max lifetime after start to connection pool

    Bug Fixes:

    • Fix transaction batching/reordering (introduced in 16.7.0)
    • Fix default Sybase IQ update via insert threshold
    • Fix running tests in different timezones
    Source code(tar.gz)
    Source code(zip)
  • 17.0.0(Mar 2, 2018)

  • 16.7.1(Feb 28, 2018)

  • 16.7.0(Feb 6, 2018)

    16.7.0 - 2018-02-06

    Enhancements:

    • New module: XA integration with a JMS message loop

    Bug Fixes:

    • Fix IllegalStateException when shutdown happens from hook
    • Fix for Deep fetch issue
    • Fix update on objects from different sources
    • Fix navigating through a dated list with None operation
    • Fix for incrementing past data for bitemporal tables
    Source code(tar.gz)
    Source code(zip)
  • 16.6.1(Oct 4, 2017)

    16.6.1 - 2017-10-04

    Enhancements:

    • JDK9 compatibility: remove use of jigsawed class

    Bug Fixes:

    • Fix NPE in transactional reads of non-dated objects
    • Fix multiple-or-clauses in deep relationships sql generation

    GAV:

    com.goldmansachs.reladomo,reladomo,16.6.1 com.goldmansachs.reladomo,reladomogen,16.6.1 com.goldmansachs.reladomo,reladomo-serial,16.6.1 com.goldmansachs.reladomo,reladomo-test-util,16.6.1 com.goldmansachs.reladomo,reladomo-gen-util,16.6.1

    Source code(tar.gz)
    Source code(zip)
  • 16.6.0(Sep 22, 2017)

    16.6.0 - 2017-09-22

    Enhancements:

    • Support Sybase IQ native driver 16.1 with bulk insert support
    • Added n/uni char/varchar to MsSQL reverse mapping
    • Remove unimplemented Enum mapping

    Bug Fixes:

    • Fix DbExtractor NPE with timezone converted values
    • Fix interface method visibility

    GAV:

    com.goldmansachs.reladomo,reladomo,16.6.0 com.goldmansachs.reladomo,reladomogen,16.6.0 com.goldmansachs.reladomo,reladomo-serial,16.6.0 com.goldmansachs.reladomo,reladomo-test-util,16.6.0 com.goldmansachs.reladomo,reladomo-gen-util,16.6.0

    Source code(tar.gz)
    Source code(zip)
  • 16.5.1(Aug 3, 2017)

    16.5.1 - 2017-08-03

    Enhancements:

    • Add getInstanceForOracle12 to OracleDatabaseType that can do batch updates with optimistic locking

    Bug Fixes:

    • Disable batch updates on Oracle when doing optimistic locking

    GAV:

    com.goldmansachs.reladomo,reladomo,16.5.1 com.goldmansachs.reladomo,reladomogen,16.5.1 com.goldmansachs.reladomo,reladomo-serial,16.5.1 com.goldmansachs.reladomo,reladomo-test-util,16.5.1 com.goldmansachs.reladomo,reladomo-gen-util,16.5.1

    Source code(tar.gz)
    Source code(zip)
  • 16.5.0(Jul 28, 2017)

    16.5.0 - 2017-07-28

    Enhancements:

    • New merge api for transactional lists.
    • Add Postgres, MsSql, Maria, and Oracle support to schema to xml generation.

    Bug Fixes:

    • Fix over specified relationship resolution.
    • Ensure same ordering when processing same input for generation.

    GAV:

    com.goldmansachs.reladomo,reladomo,16.5.0 com.goldmansachs.reladomo,reladomogen,16.5.0 com.goldmansachs.reladomo,reladomo-serial,16.5.0 com.goldmansachs.reladomo,reladomo-test-util,16.5.0 com.goldmansachs.reladomo,reladomo-gen-util,16.5.0

    Source code(tar.gz)
    Source code(zip)
  • 16.4.0(Jul 17, 2017)

    16.4.0 - 2017-07-17

    Enhancements:

    • Add a shutdown hook to the notification manager.
    • Improve subquery cache by recognizing more cases
    • Use connection based temp tables more frequently, with proper retry

    Bug Fixes:

    • Fix code generator dirty checking (CRC)

    GAV:

    com.goldmansachs.reladomo,reladomo,16.4.0 com.goldmansachs.reladomo,reladomogen,16.4.0 com.goldmansachs.reladomo,reladomo-serial,16.4.0 com.goldmansachs.reladomo,reladomo-test-util,16.4.0 com.goldmansachs.reladomo,reladomo-gen-util,16.4.0

    Source code(tar.gz)
    Source code(zip)
  • 16.3.2(Jul 6, 2017)

    16.3.2 - 2017-07-05

    Bug Fixes:

    • Fix equalsEdgePoint with subquery

    GAV:

    com.goldmansachs.reladomo,reladomo,16.3.2 com.goldmansachs.reladomo,reladomogen,16.3.2 com.goldmansachs.reladomo,reladomo-serial,16.3.2 com.goldmansachs.reladomo,reladomo-test-util,16.3.2 com.goldmansachs.reladomo,reladomo-gen-util,16.3.2

    Source code(tar.gz)
    Source code(zip)
  • 16.3.1(Jul 5, 2017)

    16.3.1 - 2017-07-05

    Enhancements:

    • Implement a simple subquery cache.
    • Notification initialization may be done after full cache load.

    Bug Fixes:

    • Fix simulated sequence rare initialization deadlock.
    • Fix NPE in full cache not-exists.
    • Prevent compact operations from ending up in the query cache.

    GAV: com.goldmansachs.reladomo,reladomo,16.3.1 com.goldmansachs.reladomo,reladomogen,16.3.1 com.goldmansachs.reladomo,reladomo-serial,16.3.1 com.goldmansachs.reladomo,reladomo-test-util,16.3.1 com.goldmansachs.reladomo,reladomo-gen-util,16.3.1

    Source code(tar.gz)
    Source code(zip)
  • 16.3.0(Jun 2, 2017)

    16.3.0 - 2017-06-02

    Enhancements:

    • Better heuristics for camel casing when generating xml from existing schema
    • Support nullable boolean in ddl generation and insert/update
    • Change generated type for long to bigint for Sybase ASE

    GAV: com.goldmansachs.reladomo,reladomo,16.3.0 com.goldmansachs.reladomo,reladomogen,16.3.0 com.goldmansachs.reladomo,reladomo-serial,16.3.0 com.goldmansachs.reladomo,reladomo-test-util,16.3.0 com.goldmansachs.reladomo,reladomo-gen-util,16.3.0

    Source code(tar.gz)
    Source code(zip)
  • 16.2.0(May 25, 2017)

    16.2.0 - 2017-05-25

    Enhancements:

    • Serialization/Deserialization utilities with example implementations in Jackson & Gson
    • Consolidated class level metadata API
      • See the ReladomoClassMetaData class

    Bug Fixes:

    • Honor setting of generated CVS header. Off by default.
    • Increment refresh and database retrieval counts for temporal objects correctly.
    • Fix NPE in DbExtractor for UTC converted attributes

    GAV: com.goldmansachs.reladomo,reladomo,16.2.0 com.goldmansachs.reladomo,reladomogen,16.2.0 com.goldmansachs.reladomo,reladomo-serial,16.2.0 com.goldmansachs.reladomo,reladomo-test-util,16.2.0 com.goldmansachs.reladomo,reladomo-gen-util,16.2.0

    Source code(tar.gz)
    Source code(zip)
  • 16.1.4(May 3, 2017)

    Reladomo 16.1.4

    16.1.4 - 2017-05-03

    Enhancements:

    • Improve using full cache in a transaction when transaction participation is not required
    • Tweak bulk loader connection pooling to reduce connection open/close.
    • Add support for bigint for Sybase ASE

    Bug Fixes:

    • Fix Sybase inserts with more than 160 columns.

    GAV: com.goldmansachs.reladomo,reladomo,16.1.4 com.goldmansachs.reladomo,reladomogen,16.1.4 com.goldmansachs.reladomo,reladomo-test-util,16.1.4 com.goldmansachs.reladomo,reladomo-gen-util,16.1.4

    Source code(tar.gz)
    Source code(zip)
  • 16.1.3(Mar 7, 2017)

    16.1.3 - 2017-03-07

    Enhancements:

    • Enabled in-memory db extractor merge and Timestamp Attribute time zone conversion
    • Reduce db hit with filtered relationship list navigation with deep fetch
    • Try harder to resolve mixed partial/full cache queries

    Bug Fixes:

    • Allow calls MithraMultithreadedQueueLoader.shutdownPool() to before start
    • fix MithraCompositeList.contains

    GAV: com.goldmansachs.reladomo,reladomo,16.1.3 com.goldmansachs.reladomo,reladomogen,16.1.3 com.goldmansachs.reladomo,reladomo-test-util,16.1.3 com.goldmansachs.reladomo,reladomo-gen-util,16.1.3

    Source code(tar.gz)
    Source code(zip)
  • 16.1.2(Jan 26, 2017)

    16.1.2 - 2017-01-26

    This release includes a new document: Reladomo Philosophy & Vision See the javadoc jar or online

    Enhancements:

    • make sure cache load exceptions are reported at startup
    • recognize more DB2 connection dead error codes

    Bug fixes:

    • Fix SyslogChecker for String SourceAttribute.
    • Fix xml parsing for orderBys.

    GAV: com.goldmansachs.reladomo,reladomo,16.1.2 com.goldmansachs.reladomo,reladomogen,16.1.2 com.goldmansachs.reladomo,reladomo-test-util,16.1.2 com.goldmansachs.reladomo,reladomo-gen-util,16.1.2

    Source code(tar.gz)
    Source code(zip)
  • 16.1.1(Nov 3, 2016)

    16.1.1 - 2016-11-03

    Enhancements:

    • implement equality substitution in chained mapper

    GAV: com.goldmansachs.reladomo,reladomo,16.1.1 com.goldmansachs.reladomo,reladomogen,16.1.1 com.goldmansachs.reladomo,reladomo-test-util,16.1.1 com.goldmansachs.reladomo,reladomo-gen-util,16.1.1

    Source code(tar.gz)
    Source code(zip)
  • 16.1.0(Oct 18, 2016)

    16.1.0 - 2016-10-18

    Enhancements:

    • multi-update no longer uses or-clauses

    Bug fixes:

    • fix combining mapped tuple attributes
    • fix Aggregate query as of attribute value setting
    • fix findBy and none-cache

    GAV: com.goldmansachs.reladomo,reladomo,16.1.0 com.goldmansachs.reladomo,reladomogen,16.1.0 com.goldmansachs.reladomo,reladomo-test-util,16.1.0 com.goldmansachs.reladomo,reladomo-gen-util,16.1.0

    Source code(tar.gz)
    Source code(zip)
  • 16.0.0(Sep 13, 2016)

    Initial open source release. Enhancements:

    • Suppressed ClassNotFoundException for notification
    • New utility class: MultiThreadedBatchProcessor

    GAV: com.goldmansachs.reladomo,reladomo,16.0.0 com.goldmansachs.reladomo,reladomogen,16.0.0 com.goldmansachs.reladomo,reladomo-test-util,16.0.0 com.goldmansachs.reladomo,reladomo-gen-util,16.0.0

    Source code(tar.gz)
    Source code(zip)
Owner
Goldman Sachs
Goldman Sachs
Mystral (pronounced "Mistral") is an efficient library to deal with relational databases quickly.

Mystral An efficient library to deal with relational databases quickly. A little request: read the Javadoc to understand how these elements work in de

null 13 Jan 4, 2023
Database Subsetting and Relational Data Browsing Tool.

Jailer Database Tool Jailer is a tool for database subsetting and relational data browsing. The Subsetter exports consistent, referentially intact row

Wisser 1.5k Jan 7, 2023
Event capture and querying framework for Java

Eventsourcing for Java Enabling plurality and evolution of domain models Instead of mutating data in a database, Eventsourcing stores all changes (eve

Eventsourcing, Inc. 408 Nov 5, 2022
Multi-DBMS SQL Benchmarking Framework via JDBC

BenchBase BenchBase (formerly OLTPBench) is a Multi-DBMS SQL Benchmarking Framework via JDBC. Table of Contents Quickstart Description Usage Guide Con

CMU Database Group 213 Dec 29, 2022
LSPatch: A non-root Xposed framework fork from Xpatch

Introduction LSPatch fork from Xpatch. LSPatch provides a way to insert dex and so into the target APK by repackaging. The following changes have been

LSPosed 1.9k Jan 2, 2023
Ja-netfilter - A javaagent framework

ja-netfilter v2.0.1 A javaagent framework Usage download from the releases page add -javaagent:/absolute/path/to/ja-netfilter.jar argument (Change to

null 7.3k May 26, 2022
Apache Cayenne is an open source persistence framework licensed under the Apache License

Apache Cayenne is an open source persistence framework licensed under the Apache License, providing object-relational mapping (ORM) and remoting services.

The Apache Software Foundation 284 Dec 31, 2022
Apache Aurora - A Mesos framework for long-running services, cron jobs, and ad-hoc jobs

NOTE: The Apache Aurora project has been moved into the Apache Attic. A fork led by members of the former Project Management Committee (PMC) can be fo

The Apache Software Foundation 627 Nov 28, 2022
A javaagent framework

ja-netfilter 2022.2.0 A javaagent framework Usage download from the releases page add -javaagent:/absolute/path/to/ja-netfilter.jar argument (Change t

null 35 Jan 2, 2023
H2 is an embeddable RDBMS written in Java.

Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; disk-based or in-memory

H2 Database Engine 3.6k Jan 5, 2023
A blazingly small and sane redis java client

Jedis Jedis is a blazingly small and sane Redis java client. Jedis was conceived to be EASY to use. Jedis is fully compatible with redis 2.8.x, 3.x.x

Redis 10.8k Dec 31, 2022
Elasticsearch Java Rest Client.

JEST Jest is a Java HTTP Rest client for ElasticSearch. ElasticSearch is an Open Source (Apache 2), Distributed, RESTful, Search Engine built on top o

Searchly 2.1k Jan 1, 2023
Java binding for etcd

jetcd: Java binding for etcd TravisCI: CircleCI: A simple Java client library for the awesome etcd Uses the Apache HttpAsyncClient to implement watche

Justin Santa Barbara 134 Jan 26, 2022
LINQ-style queries for Java 8

JINQ: Easy Database Queries for Java 8 Jinq provides developers an easy and natural way to write database queries in Java. You can treat database data

Ming Iu 641 Dec 28, 2022
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.

MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be u

Jan Kotek 4.6k Dec 30, 2022
MariaDB Embedded in Java JAR

What? MariaDB4j is a Java (!) "launcher" for MariaDB (the "backward compatible, drop-in replacement of the MySQL(R) Database Server", see FAQ and Wiki

Michael Vorburger ⛑️ 720 Jan 4, 2023
Unified Queries for Java

Querydsl Querydsl is a framework which enables the construction of type-safe SQL-like queries for multiple backends including JPA, MongoDB and SQL in

Querydsl 4.1k Dec 31, 2022
requery - modern SQL based query & persistence for Java / Kotlin / Android

A light but powerful object mapping and SQL generator for Java/Kotlin/Android with RxJava and Java 8 support. Easily map to or create databases, perfo

requery 3.1k Jan 5, 2023