Releases: longevityframework/longevity
Annotation Macros
[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 andapply
methods
that take either aLongevityConfig
or a Typesafe config. - 2016.12.06 - Add annotation macro
@subdomain
in package
longevity.subdomain.annotations
. - 2016.12.06 - Add
Subdomain
constructor andapply
method that
collect all thePTypes
andCTypes
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 objectskeys
and
indexes
to look for keys and indexes. Users must now define
PType.keySet
, and overridePType.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 returnKey[P]
instead ofPartitionKey[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
andlongevity.subdomain.PartitionKey
.
Remove typeslongevity.subdomain.AnyKey
and
longevity.subdomain.AnyPartitionKey
, as they no longer serve any
purpose.
API Simplifications
[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") tolongevity.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 aFeatureSpec
to a
FlatSpec
. Users usingLongevityContext.repoCrudSpec
will notice
significantly less verbose test output.
Cross Build to Scala 2.12
- 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
Partition Keys
[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.
Query Enhancements
[0.15.0] - Query Enhancements
- 2016.10.08 - Remove
KeyVal.key
and changeKeyVal
from an
abstract class into a trait. To migrate existing code, you will need
to remove theKey
argument supplied to each of yourKeyVal
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 packagelongevity.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.
Subdomain Repackaging
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
toDerivedEType
. Rename
PolyType
toPolyEType
. - 2016.10.04 - Move
CoreDomain
,GenericSubdomain
, and
SupportingSubdomain
from packagelongevity.subdomain
to
longevity.ddd.subdomain
. - 2016.10.04 - Move
Entity
,EntityType
,ValueObject
, and
ValueType
from packagelongevity.subdomain.embeddable
to
longevity.ddd.subdomain
. - 2016.10.04 - Move
Event
,Root
, andViewItem
from package
longevity.subdomain.persistent
to package
longevity.ddd.subdomain
. - 2016.10.04 - Move
EventType
,RootType
, andView
from package
longevity.subdomain.ptype
to packagelongevity.ddd.subdomain
. - 2016.10.04 - Move
DerivedEType
,EType
,ETypePool
,
Embeddable
, andPolyEType
from package
longevity.subdomain.embeddable
tolongevity.subdomain
. - 2016.10.04 - Move
Persistent
from package
longevity.subdomain.persistent
tolongevity.subdomain
. - 2016.10.04 - Move
DerivedPType
,PType
,PTypePool
, and
PolyPType
from packagelongevity.subdomain.ptype
to
longevity.subdomain
. - 2016.10.04 - Move package
longevity.ddd.subdomain
into a separate
project calledlongevity-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"
.
Reflection Bugfix
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.
Jetsam
[0.13.0] - 2016.09.22 - Jetsam
Some odds and ends that have been accumulating in the backlog.
- 2016.09.22 - Rename
PersistenceStrategy
toBackEnd
. Move
BackEnd
from being a separate argument toLongevityContext
creator methods, to being part of the config, under config property
longevity.backEnd
. - 2016.09.19 - Add
OPState
to go along withFPState
andFOPState
. - 2016.09.19 - Add JSON marshallers at
LongevityContext.jsonMarshaller
and
LongevityContext.jsonUnmarshaller
.
Flotsam
[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.
fix recently introduced bug in CassandraRepo
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...