Longevity Versions Save

A Persistence Framework for Scala and NoSQL

0.18.0

7 years ago

[0.18.0] - 2016.12.07 - Annotation Macros

  • 2016.12.06 - Prevent emblem leakage of TestDataGenerator and CustomGeneratorPool by wrapping them in longevity classes. Slightly simplified the API for adding a custom test data generators.
  • 2016.12.06 - Add LongevityContext constructors and apply methods that take either a LongevityConfig or a Typesafe config.
  • 2016.12.06 - Add annotation macro @subdomain in package longevity.subdomain.annotations.
  • 2016.12.06 - Add Subdomain constructor and apply method that collect all the PTypes and CTypes by package scanning.
  • 2016.11.30 - Add annotation macros @component, @derivedComponent, @derivedPersistent, @keyVal, @mprops, @persistent, @polyComponent, and @polyPersistent in package longevity.subdomain.annotations.
  • 2016.11.30 - Remove scanning of PType inner objects keys and indexes to look for keys and indexes. Users must now define PType.keySet, and override PType.indexSet, to declare keys and indexes. We made this change since the object scanning was superfluous, and complicates the API. (In contrast, scanning for properties is useful, as users need to be able to call properties by name. However, users never really need to call keys and indexes by name, so there is no advantage to naming them in an inner object.)
  • 2016.11.23 - Add method PType.emptyKeySet.
  • 2016.11.23 - Make PType.partitionKey methods return Key[P] instead of PartitionKey[P]. this is for convenience of Scala 2.11 users, so they dont have to declare the full type of their keySet.
  • 2016.11.22 - Remove second type parameter from longevity.subdomain.Key and longevity.subdomain.PartitionKey. Remove types longevity.subdomain.AnyKey and longevity.subdomain.AnyPartitionKey, as they no longer serve any purpose.

0.17.0

7 years ago

[0.17.0] - 2016.11.15 - API Simplifications

  • 2016.11.13 - Remove second type parameter from longevity.subdomain.KeyVal.
  • 2016.11.12 - Rename longevity.subdomain.EType (for "embeddable type") to longevity.subdomain.CType (for "component type").
  • 2016.11.12 - Remove traits longevity.subdomain.Embeddable and longevity.subdomain.Persistent. Users no longer need to extend their subdomain classes with these empty marker traits.
  • 2016.11.12 - Change RepoCrudSpec from a FeatureSpec to a FlatSpec. Users using LongevityContext.repoCrudSpec will notice significantly less verbose test output.

0.16.1

7 years ago
  • Implement cross build to publish artifacts for both Scala versions 2.11 and 2.12
  • Up ScalaTest version from 2.2.6 to 3.0.1

0.16.0

7 years ago

[0.16.0] - 2016.11.10 - Partition Keys

  • 2016.11.09 - Uniformly convert DateTime to UTC time zone. This seems like the best approach right now, as both Cassandra and MongoDB back ends support timestamps without time zone information. It also resolves issues with sorting dates.
  • 2016.11.09 - Implement partition keys. Please see the user manual for details.
  • 2016.10.27 - Replace Casbah with Java driver in MongoDB back end. We are now using the vanilla Java driver for Mongo. This change should not affect users.
  • 2016.10.27 - Fix MongoDB URIs so they work in a sharded environment.
  • 2016.10.27 - Disallow keys and indexes that duplicate the properties of other keys or indexes. This may cause existing code to break. Fix is to root out the duplicates. If you have a key and an index that duplicate each other, you can safely remove the index, as it is redundant with the key.

0.15.0

7 years ago

[0.15.0] - Query Enhancements

  • 2016.10.08 - Remove KeyVal.key and change KeyVal from an abstract class into a trait. To migrate existing code, you will need to remove the Key argument supplied to each of your KeyVal types.
  • 2016.10.12 - Queries have been extended with "order-by", "offset", and "limit" clauses. The query DSL has likewise been extended.
  • 2016.10.12 - Many of the classes used to build queries have been re-organized into new package longevity.subdomain.query. This should not affect you if you are only using the query DSL.

Please refer to the user manual for the latest on the query API.

0.14.0

7 years ago

In brief, we have collapsed packages longevity.subdomain.embeddable and longevity.subdomain.persistent into longevity.subdomain. We have moved a number of classes that were nothing more than DDD synonyms for existing longevity terms into a new side-project called longevity-ddd.

In effect we are cleaning out the namespace and removing some of the clutter of our DDD roots in our continued efforts to develop a general-purpose persistence framework.

The bloody details:

  • 2016.10.04 - Rename DerivedType to DerivedEType. Rename PolyType to PolyEType.
  • 2016.10.04 - Move CoreDomain, GenericSubdomain, and SupportingSubdomain from package longevity.subdomain to longevity.ddd.subdomain.
  • 2016.10.04 - Move Entity, EntityType, ValueObject, and ValueType from package longevity.subdomain.embeddable to longevity.ddd.subdomain.
  • 2016.10.04 - Move Event, Root, and ViewItem from package longevity.subdomain.persistent to package longevity.ddd.subdomain.
  • 2016.10.04 - Move EventType, RootType, and View from package longevity.subdomain.ptype to package longevity.ddd.subdomain.
  • 2016.10.04 - Move DerivedEType, EType, ETypePool, Embeddable, and PolyEType from package longevity.subdomain.embeddable to longevity.subdomain.
  • 2016.10.04 - Move Persistent from package longevity.subdomain.persistent to longevity.subdomain.
  • 2016.10.04 - Move DerivedPType, PType, PTypePool, and PolyPType from package longevity.subdomain.ptype to longevity.subdomain.
  • 2016.10.04 - Move package longevity.ddd.subdomain into a separate project called longevity-ddd. If you want to continue using the wrapper classes found there, please add the following dependency to your project: libraryDependencies += "org.longevityframework" %% "longevity-ddd" % "x.y.z".

0.13.1

7 years ago

There was a bug in our use of Scala reflection. In brief, we were using the class loader (i.e., scala reflection Mirror) that was used to load the longevity library. This is bogus, as we are reflecting against user classes! We changed things to reflect on the mirror of the TypeTags (they get wrapped in TypeKeys) that the user library provides to use.

End result is that projects that do funky things with class loaders will not get reflection exceptions when using longevity.

0.13.0

7 years ago

[0.13.0] - 2016.09.22 - Jetsam

Some odds and ends that have been accumulating in the backlog.

  • 2016.09.22 - Rename PersistenceStrategy to BackEnd. Move BackEnd from being a separate argument to LongevityContext creator methods, to being part of the config, under config property longevity.backEnd.
  • 2016.09.19 - Add OPState to go along with FPState and FOPState.
  • 2016.09.19 - Add JSON marshallers at LongevityContext.jsonMarshaller and LongevityContext.jsonUnmarshaller.

0.12.0

7 years ago

[0.12.0] - 2016.09.13 - Flotsam

Some odds and ends that have been accumulating in the backlog. The next release, Jetsam, will be more of the same.

  • 2016.09.15 - Remove PState.dirty. We are taking this out because there we may decide to stop keeping track of the original version of the persistent object, in order to reduce memory usage.
  • 2016.09.14 - Add RepoPool.createSchema() and configuration flag autocreateSchema.
  • 2016.09.13 - Add logging for all Repo methods and database calls.
  • 2016.09.13 - Add API method RepoPool.closeSession(). This was added because leaving the Cassandra session open can cause user programs to fail to terminate under certain circumstances, If your main program is hanging when using Cassandra, please call this method at the end of your program.

0.11.4

7 years ago

the previous fix in 0.11.3 was bogus. one of those days!

this bug is a NullPointerE in Cassandra create or update methods. It occurred when optimistic locking was turned off. i need to expand my test suite to cover different configs...