blob: 250250c5ba88c6c8626e2df6b00e566374ac795d [file] [log] [blame]
Apache Cayenne Upgrade Information
==================================
IMPORTANT: be sure to read all notes for the intermediate releases between your
current release and the release you are upgrading to.
-------------------------------------------------------------------------------
UPGRADING TO 4.2.M1
* Per CAY-2520 ObjectId can't be instantiated directly, ObjectId.of(..) methods should be used.
E.g. ObjectId.of("Artist", 1) instead of new ObjectId("Artist", 1).
* Per CAY-2523 SelectQuery was deprecated. Use ObjectSelect instead.
* Per CAY-2525 OpenBase adapter was deprecated.
* Per CAY-2467 Property class is replaced with a type-aware Property API, it's mostly backwards compatible.
To take advantage of this new API you should regenerate code via Modeler ("Tools" -> "Generate Classes") or cgen tools.
* Per CAY-2563 SQLSelect.scalarQuery(Class<T>, String) and SQLSelect.scalarQuery(Class<T>, String, String) methods
were deprecated.
* Per CAY-2585 SQLSelect.scalarQuery(String sql), SQLSelect.scalarQuery(String sql, String dataMapName),
SQLSelect.scalarQuery(String sql, Class<?> firstType, Class<?>... types),
SQLSelect.scalarQuery(String sql, String dataMapName, Class<?> firstType, Class<?>... types) and
SQLSelect.params(String name, Object value) were deprecated.
UPGRADING TO 4.1.M3
* Per CAY-2514 SERVER_CONTEXTS_SYNC_PROPERTY default value was set to false.
UPGRADING TO 4.1.M2
* Per CAY-2438 DataChannelFilter filter was deprecated and two new independent filters are introduced:
DataChannelSyncFilter and DataChannelQueryFilter.
* Per CAY-2400 Cayenne-DBCP2 integration was deprecated
* Per CAY-2377 All code deprecated in Cayenne 4.0 was removed, please review your code before upgrading.
* Per CAY-2372 three new modules extracted from Cayenne core. No changes to the packages or api have been made,
so only include additional modules to your project if you use them.
- cayenne-web module contains all logic related to bootstrapping Cayenne inside a servlet container.
WebModule is autoloaded, so you shouldn't add it to runtime explicitly any more.
- cayenne-osgi module contains OSGi related functionality.
- cayenne-rop-server ROP server part.
UPGRADING TO 4.1.M1
* Per CAY-2351 Minimum supported Java version is now Java 8. There is no options to use Cayenne 4.1 with earlier
versions, you should use 4.0 version if Java 7 is required by your project.
* Per CAY-2345 Velocity replaced with Cayenne own template engine by default in cayenne-server,
this should be transparent in almost all cases, however if you relied on advanced Velocity
features in SQLTemplate you can include auto-loaded cayenne-velocity module and keep using Velocity,
no other actions required.
* Per CAY-2335 ServerRuntime by default will fail to load projects in case of version mismatch.
You have two options:
- update project files via opening them in Cayenne Modeler
- if you are unable to do so you can use new cayenne-project-compatibility module,
to enable it simply add it as a dependency in Maven (or any other build system you use), however
this module can support only versions created by Cayenne 3.1 or later.
* Per CAY-2330 Field-based data objects are introduced and enabled by default.
Your existing code will continue to work, but in order to get benefits from this feature you should
regenerate code via Modeler ("Tools" -> "Generate Classes") or cgen tools in Maven/Ant/Gradle plugins.
Also note that serialization format of old data objects have changed, make sure you don't use serialization
form to store your objects.
UPGRADING TO 4.0.B1
* Per CAY-2302 postcommit module and all it's internals renamed to commitlog.
Most important change is the new @CommitLog annotation which should be used instead of @Auditable,
this change is backward incompatible and most likely for you to miss as IDE won't give you a hint.
Please keep in mind that new @CommitLog annotation is used only by commitlog module.
Deprecated functionality in lifecycle module still depends on @Auditable annotation.
Here is list of steps you should do in order to update your code:
- include cayenne-commitlog module into your project (i.e. add dependency to your pom.xml)
- remove cayenne-lifecycle (and cayenne-postcommit if you have it) module from your project
- switch usages of @Auditable to @CommitLog
- change usages of renamed classes, here is two classes most likely used by your code:
PostCommitListener -> CommitLogListener
PostCommitModuleBuilder -> CommitLogModuleExtender
- fix all imports for renamed packages:
org.apache.cayenne.lifecycle.postcommit -> org.apache.cayenne.commitlog
org.apache.cayenne.lifecycle.changemap -> org.apache.cayenne.commitlog.model
- change CommitLogModuleExtender methods:
auditableEntitiesOnly() -> commitLogAnnotationEntitiesOnly()
build() -> module()
* Per CAY-2280 Cayenne migrated from commons-logging to SLF4J.
Here is options you have to upgrade your project accordingly:
1) Migrate your logging to SLF4J. Please see https://www.slf4j.org for documentation about
inclusion into your project logging backend of you choice.
2) Other option is to use commons-logging over SLF4J and keep all logging compatible with previous Cayenne versions.
In order to do so you need:
- remove commons-logging dependency if you have it
- add to your project slf4j-jcl dependency
As a part of this change classes CommonsJdbcEventLogger and FormattedCommonsJdbcEventLogger
were renamed to Slf4jJdbcEventLogger and FormattedSlf4jJdbcEventLogger respectively.
Internally they are using now org.apache.cayenne.log.JdbcEventLogger interface as a logger name.
* Per CAY-2278 Packages org.apache.cayenne.lifecycle.audit and org.apache.cayenne.lifecycle.changeset where deprecated.
Please use instead cayenne-commitlog module and its new @CommitLog annotation.
Weighted graph sorter moved to cayenne-server into org.apache.cayenne.ashwood package.
Packages org.apache.cayenne.lifecycle.changemap and org.apache.cayenne.lifecycle.postcommit
where moved to the new cayenne-commitlog module.
Please change your code accordingly (see also notes above for CAY-2302).
* Per CAY-2277 ClientRuntime created with ClientRuntimeBuilder, direct instantiation of
ClientRuntime is deprecated. Also whole ClientLocalRuntime class is deprecated, use instead
ClientRuntimeBuilder.local() method.
* Per CAY-2262 Client modules are now auto-loaded by default to turn off auto-loading use
ClientRuntimeBuilder.disableModulesAutoLoading() method.
List of client modules:
- cayenne-client
- cayenne-client-jetty
- cayenne-protostuff (it also supports auto-loading by ServerRuntimeBuilder)
Also new modules are extracted from the existing one and should be added to your pom.xml if the corresponding
functionality is used by your project:
- cayenne-cache-invalidation (was part of cayenne-lifecycle)
- cayenne-commitlog (was part of cayenne-lifecycle)
* Per CAY-2259 Cache invalidation module refactored to provide new functionality and better align with
new module autoloading functionality. Here is list of changes:
- Package org.apache.cayenne.lifecycle.cache renamed to org.apache.cayenne.cache.invalidation.
- CacheInvalidationModuleBuilder renamed to CacheInvalidationModuleExtender and its method build()
renamed to module().
- InvalidationFunction returns CacheGroupDescriptor instead of simple String with cache group name,
so you need to change your custom functions accordingly.
* Per CAY-2268 DI methods for binding ordered lists, introduced in 4.0.M3 where changed:
- method after() replaced by explicit addAfter(), addAllAfter()
- method before() replaced by insertBefore(), insertAllBefore()
* Per CAY-2258 Injection of List and Map are made type-safe, as a result small incompatibilities are introduced.
If you are using following methods:
- bindMap(String bindingName)
- bindList(String bindingName)
you should change them to corresponding type-safe versions:
- bindMap(Class<T> valueType, String bindingName)
- bindList(Class<T> valueType, String bindingName)
Also if you are using DI Keys like Key.get(Map.class, "bindingName") or Key.get(List.class, "bindingName")
you should use new corresponding factory methods Key.mapOf(MapValues.class, "bindingName")
and Key.listOf(ListValues.class, "bindingName").
Additionally new API allows you to bind Lists and Maps without using names:
- binder.bindList(SomeUniqueType.class).add(...);
- @Inject List<SomeUniqueType> list;
* Per CAY-1873 and CAY-2266 Cache and remote notification configuration was moved from Modeler into
runtime DI settings. To set custom cache size, you should use custom module like this:
Module module = binder -> {
ServerModule.setSnapshotCacheSize(binder, 20000);
};
Or you can use cmd line arg: -Dcayenne.DataRowStore.snapshot.size=20000
If you have used remote notifications, you should include one of the following modules into your project:
- cayenne-jgroups
- cayenne-jms
- cayenne-xmpp
For maven users this can be easily done by adding dependency to pom.xml:
<dependency>
<groupId>org.apache.cayenne</groupId>
<artifactId>cayenne-jgroups</artifactId>
<version>4.0.M6</version>
</dependency>
Module will be autoloaded and remote notifications enabled, so only thing you need is to provide configuration.
Custom DI module should be used for that, e.g. for JGroups:
Module module = binder -> {
JGroupsModule.contributeMulticastAddress(binder, MCAST_ADDRESS);
JGroupsModule.contributeMulticastPort(binder, MCAST_PORT));
};
* Per CAY-2256 Fix for CAY-2146 was reverted, as it appears that we can't reliably deduce whether
relationship is optional or not. So in case of mandatory relationships in vertical inheritance
you should perform manual validation before insert by using "prePersist" callback in your
object (you can create it in the Cayenne Modeler) or by overriding "validateForSave" method.
UPGRADING TO 4.0.M5
* Per CAY-2186 DerbyPkGenerator switched from AUTO_PK_TABLE to sequence-based PK generator
If you relied in anyway on AUTO_PK_TABLE usage in derby, you should change your code.
* Per CAY-2228 Support for multiple cache groups has been removed from caching and query API
as none of the modern providers supports it. If you relied on this feature you should
implement it by yourself or change caching provider
* Per CAY-1980 "maven-cayenne-modeler-plugin" renamed to "cayenne-modeler-maven-plugin"
* Per CAY-2225 CacheInvalidationFilter has been changed to support custom invalidation rules,
in addition to the rule based on @CacheGroups annotation.
If you have used it previously, you should change its binding to runtime from direct binding in
a custom module to a module built by CacheInvalidationModuleBuilder.
* Per CAY-2212 cdbimport tool revisited once again, so configuration of Maven plugin should be changed.
- "maven-cayenne-plugin" is deprecated, please switch to "cayenne-maven-plugin"
- <reverseEngineering> tag replaced with <dbimport> tag
- new <dataSource> tag introduced that should enclose all connection properties:
1. <driver>
2. <url>
3. <user>
4. <password>
- top level properties moved to <dbimport>:
1. <defaultPackage>
2. <forceDataMapCatalog>
3. <forceDataMapSchema>
4. <meaningfulPkTables>
5. <namingStrategy>
6. <stripFromTableNames>
7. <usePrimitives>
- Java 8 java.time.* types are now used by default in cdbimport (and in "Reengineer Database Schema" tool in Modeler)
This can be controlled by <useJava7Types> property in <dbimport> (or checkbox in Modeler).
- For Ant users: cayenne-tools.jar split into two parts:
1. cayenne-ant.jar for Ant tasks
2. cayenne-cgen.jar for class generation functionality (required only for cgen task)
* Per CAY-2166, Cayenne supports auto-loading of DI modules. There are a few changes worth mentioning:
- Service override policies. In the previous 4.0 milestones custom modules would override "builder" modules
(i.e. implicit modules that wrap around various customizations made in response to the builder method calls). It
seemed logical to reverse this order, and let builder modules override custom modules. As the builder is
invoked explicitly when the stack assembly is performed, while modules can be written without any knowledge of the
final stack.
- Module Renaming and Explicit Loading of Modules. If you see compile errors (class not found for CayenneJodaModule,
CayenneJava8Module), just remove explicit loading of those modules. They will be auto-loaded if they are on classpath.
If you explicitly turn off auto-loading, use the new names for these modules: JodaModule and Java8Module.
* Per CAY-2164, creating a ServerRuntimeBuilder is done via a static method on ServerRuntime ("ServerRuntime.builder()").
The previous style (ServerRuntimeBuilder.builder()) is deprecated and will soon be removed, so you should replace it
with the new API.
UPGRADING TO 4.0.M4
* Per CAY-2133, LegacyObjectNameGenerator is no longer provided, as it wasn't possible to maintain it in a fully backwards-
compatible manner. Embrace the new naming scheme, or provide your own ObjectNameGenerator if you absolutely need the
old names.
* Per CAY-2125 we no longer inject SchemaUpdateStrategy directly. Instead SchemaUpgradeStrategyFactory is injected.
If you have your own modules with SchemaUpdateStrategy injection, it will be ignored. So please review your
DI code and update it to use SchemaUpgradeStrategyFactory (or likely its subclass).
* Per CAY-2060 4.0.M4 changes the way queries are stored in the mapping files, so all existing *.map.xml files should be upgraded.
To do that open each of your existing projects in the new CayenneModeler. Agree to perform an upgrade when asked.
Also EntityResolver.getQuery(String) method is removed. If you relied on it, consider switching to MappedSelect or MappedExec query, or if you absolutely need to get a hold of specific query, use EntityResolver.getQueryDescriptor(String).buildQuery().
* Per CAY-2065 ROPHessianServlet has been discarded in favor of new implementation called ROPServlet,
so if you were using org.apache.cayenne.configuration.rop.server.ROPHessianServlet in your web.xml configuration,
you must change it to org.apache.cayenne.rop.ROPServlet
* Per CAY-2118 we stopped a bunch of deprecated keys in cdbimport configuration, and also removed the ability to set
properties of "reverseEngineering" config object at the top level of configuration. So you will always need
<reverseEngineering></reverseEngineering> tag in Maven (but not Ant) to setup any DB filtering. Removed top-level
configuration keys:
1. catalog
2. schema (also schemaName)
3. excludeTables
4. includeTables
5. procedurePattern
6. tablePattern
7. importProcedures
8. meaningfulPk
9. overwrite
UPGRADING TO 4.0.M3
* Per CAY-2026 minimal Java version is now 1.7. If you are still need Java 1.6, you can use Cayenne 3.1 or 4.0.M2 until your
application is able to upgrade.
* We no longer add @Deprecated annotation to generated String property names in entity superclasses.
Instead String property names inclusion
became optional, controlled with "createPropertyNames" flag in cgen ("false" by default). Also a similar option
was added to Advanced Type of CayenneModeler class generation dialog.
Note if you have references to @Deprecated String properties and you run cgen without "createPropertyNames" flag,
there will be errors. Reference Jira: CAY-1991
* Per CAY-2008, CAY-2009 we got rid of org.apache.cayenne.conn.PoolManager and associated classes that made up a
pooling DataSource. A replacement is non-blocking DataSource under org.apache.cayenne.datasource (PoolingDataSource, ManagedPoolingDataSource),
best assembled using org.apache.cayenne.datasource.DataSourceBuilder.
* Per CAY-2012 API for ObjectSelect and SelectById queries were changed to remove "reset" functionality. Methods like 'where', 'prefetch',
'orderBy' that would previously reset the corresponding option state now work as "append". Methods that would previously append to the
option state were removed as redundant. Please revisit your code if you previously relied on the reset behavior.
* If you are using DBCPDataSourceFactory, you will need to take a few steps to upgrade:
- Per CAY-2025 and CAY-2026, DBCPDataSourceFactory is now based on DBCP2 (which is required under Java 1.7 and newer).
- Check your DBCP properties file to ensure it uses property names supported by DBCP.
(In the past Cayenne would require prefixing those properties with 'cayenne.dbcp.'. If you still have that prefix, remove it).
- To use DBCPDataSourceFactory, you will now have to explicitly include an extra Cayenne module, as it is no longer in cayenne-server.
E.g. if you are using Maven:
<parent>
<groupId>org.apache.cayenne</groupId>
<artifactId>cayenne-dbcp2</artifactId>
<version>4.0.M3</version>
</parent>
UPGRADING TO 4.0.M2
* Note that 3.2 line of development was renamed to 4.0. So 4.0.M2 is a straight descendant of
3.2M1.
* org.apache.cayenne.map.naming.SmartNamingStrategy was replaced with org.apache.cayenne.map.naming.DefaultNameGenerator. If you
mentioned SmartNamingStrategy explicitly in your Maven or Ant configs, make sure you rename it. Since this was/is the default,
chances are that you didn't.
* Minimal required JDK version is now 1.6 (both for modeler and runtime). This is a pretty conservative
requirement, considering that Java 1.6 has been EOL'd by Oracle on Feb 2013.
* Managing listeners in the Modeler is counterproductive and confusing,
so support for them was removed from the Modeler per CAY-1842. If you have
any listeners in the model, delete them from XML, and start using annotations,
and register them in runtime:
runtime.getDataDomain().addListener(myListener);
* Cayenne.objectForSelect(Select) that was present in 3.2M1 was replaced with ObjectContext.selectOne(Select).
* In-memory expression eval (Expression.match/Expression.evaluate) will now return true when matching Persistent
with ObjectId or Number or String (if those correspond to a given object's ObjectId). Also 2 objects in 2 different
ObjectContexts will match even if they have differing local changes. Only their ObjectIds are compared.
See CAY-1860 for details.
* ResultIterator was moved to org.apache.cayenne to make it available on both server and client. When you upgrade
related iterator code, make sure to check ResultIterator improvements (e.g. it implements Iterable, it is no
longer limited to DataRows and can fetch objects just as easy, it no longer requires catching checked exceptions).
Also check ObjectContext.iterate(..) method.
* Transaction management was refactored significantly:
* External transactions are no longer configured in the Modeler. Instead they are provided as a DI property
defined in Constants.SERVER_EXTERNAL_TX_PROPERTY.
* TransactionDelegate is no longer present. Similar functionality can be achieved by writing a decorator for
Transaction interface and using a custom TransactionFactory to decorate standard transactions.
* If your code relied on static methods Transaction.externalTransaction() or Transaction.internalTransaction() for
manual tx management, use constructors of ExternalTransaction and CayenneTransaction classes instead.
* When switching to ServerRuntimeBuilder, users of multi-config projects may erroneously assume it has the same
behavior as 3.1 ServerRuntime in assigning domain name to the resulting merged project. Which is to use the
name of the last project config. We are trying to move away from this behavior, so ServerRuntimeBuilder
will only use config name if there's only one config and no override. Otherwise it will use the override,
or if not set - "cayenne" as the default name. Reference Jira: CAY-1972
UPGRADING TO 3.1B1
* In an attempt to better organize DI configuration and ultimately make it easier to understand,
all properties and DI collection keys were placed in a single Constants interface. The property and key String
values were changed to follow a single convention. Please refer to https://issues.apache.org/jira/browse/CAY-1665
for mapping between the old and the new names.
If you are upgrading from the earlier 3.1 releases, please change your code and runtime parameters accordingly.
3.0 users may still review the new property names as some of them existed prior to DI.
UPGRADING TO 3.1M3
* DataMap listeners are no longer supported. Global listeners registered through
annotations API can be used instead. E.g.:
public class SomeListener {
@PrePersist
public void onPrePersist(Object object) {
// callback method
}
}
To register listener class use following API:
runtime.getChannel().getEntityResolver().getCallbackRegistry().addListener(listenerInstance);
Note that DataMap listeners entries from old *.map.xml files will be ignored.
UPGRADING TO 3.1M1
The most essential change in Cayenne 3.1 is a new Dependency-Injection (DI) based
bootstrap and configuration mechanism, which is not backwards compatible with 3.0.
Read on to learn about specific areas that require attention when upgrading your
application.
* Upgrading 3.0.x mapping files: Open each of your existing projects in the new
CayenneModeler. Agree to perform an upgrade when asked. Note that Cayenne
3.1 only supports one DataDomain per project, so if multiple domains existed in
the project, you'll end up with multiple project files after the upgrade. Each
will require instantiation of a separate ServerRuntime in the code.
* Upgrading 2.0.x and earlier mappings files: Note that CayenneModeler
3.1 won't be able to upgrade projects created with a Modeler older than 3.0. To
upgrade older projects do it in two steps - download Cayenne 3.0, and perform an
upgrade with 3.0 CayenneModeler. After that perform a second upgrade from 3.0 to
3.1.
* Cayenne runtime bootstrap: In 3.1 all classes under "org.apache.cayenne.conf"
package were removed, superseded by dependency injection (DI) based configuration,
with main classes located under "org.apache.cayenne.configuration" and its
subpackages. E.g. to instantiate the Cayenne stack in 3.1 you would do
something like that:
ServerRuntime cayenneRuntime = new ServerRuntime("cayenne-UntitledDomain.xml");
To obtain a new ObjectContext, the following API is used:
ObjectContext context = cayenneRuntime.getContext();
* No static configuration singleton: Cayenne 3.1 completely gets rid of a (previously
optional, but widely used) "Configuration.sharedConfiguration" singleton. This
change was done to acknowledge the fact that single configuration per application
is just a special case, and generally user can instantiate as many configurations
(or ServerRuntime's in 3.1 terms) as appropriate. This however means that the
users must now decide themselves where in their application it is appropriate to
store ServerRuntime instance (or instances). E.g. it can be stored as an attribute
of ServletContext (check out "org.apache.cayenne.configuration.web.CayenneFilter" and
"org.apache.cayenne.configuration.web.WebUtil"), reside in a user's favorite dependency
injection container (e.g. Spring), or even be saved in a user's own static singleton
variable.
* No static DataContext creation methods: Methods like DataContext.createDataContext()
were relying on static configuration singleton, which was removed (see above). Use
ServerRuntime instance methods to create context instances.
* Webapp configuration changes: "org.apache.cayenne.conf.WebApplicationContextFilter"
was replaced by "org.apache.cayenne.configuration.web.CayenneFilter". See CayenneFilter
javadocs for details on of the init parameters.
* ROP Server configuration changes: "org.apache.cayenne.remote.hessian.service.HessianServlet"
was replaced by "org.apache.cayenne.configuration.rop.server.ROPHessianServlet". See
ROPHessianServlet javadocs for details on its init parameters.
* ROP Client configuration changes: There is now a special DI "runtime" object -
"org.apache.cayenne.configuration.rop.client.ClientRuntime", so client connection
and channel can be (optionally) managed via DI, with connection parameters
specified as properties. E.g.:
Map<String, String> properties = new HashMap<String, String>();
properties.put(ClientModule.ROP_SERVICE_URL, "http://localhost:8080/tutorial/cayenne-service");
properties.put(ClientModule.ROP_SERVICE_USER_NAME, "cayenne-user");
properties.put(ClientModule.ROP_SERVICE_PASSWORD, "secret");
ClientRuntime runtime = new ClientRuntime(properties);
ObjectContext context = runtime.getContext();
The advantage of this approach in that all the client stack objects are managed
by the DI container and a user can customize/override various pieces.
* Deprecated API removal: All API deprecated as of 3.0 is removed. This may require
some code cleanup. Since 3.0 javadocs for suggested replacements. Also if custom
class generation templates are used, doublecheck that they do not reference removed
EntityUtil methods, which were replaced by variables placed directly into Velocity context.
* Custom DbAdapter / DbAdapterFactory: The interface used by Cayenne to allow custom
DbAdapters to be auto-detected with AutoAdapter has changed from
org.apache.cayenne.dba.DbAdapterFactory to org.apache.cayenne.configuration.DbAdapterDetector.
Note that now a custom implementation can rely on Cayenne DI to obtain Cayenne
dependencies via @Inject annotation. To register a custom implementation with
Cayenne DI container, one might do this in the custom DI module:
...
public void configure(Binder binder) {
...
binder.bindList(DbAdapterFactory.class).add(new MyDbAdapterDetector());
}
* Custom DataSourceFactory: The interface used by Cayenne to load custom DataSource
factories has changed from "org.apache.cayenne.conf.DataSourceFactory" to
"org.apache.cayenne.configuration.DataSourceFactory". This new interface must be
implemented by the custom factories. Note that now a custom implementation can
rely on Cayenne DI to obtain Cayenne dependencies via @Inject annotation.
* Replaced JNDI preferences hack with runtime properties: "JNDI hack", as it was
known prior to 3.1, allowed to define a named database connection using CayenneModeler,
and then Cayenne would read this connection information from Modeler preferences
and use it as a failover for JNDI DataNodes. The problem with this is that it
required CayenneModeler and HSQLDB jars on the application classpath, and also that the
preferences database was prone to data corruption. In 3.1, preferences hack is no
longer available. Instead JNDI (or really any other type of DataSourceFactory)
can be overridden via runtime properties (or by redefining DataSourceFactoryLoader
via DI). See org.apache.cayenne.configuration.server.PropertyDataSourceFactory javadocs for
details. Here are some simple examples:
-Dcayenne.jdbc.url=jdbc://urloverride
-Dcayenne.jdbc.driver=com.example.MyDriver
-Dcayenne.jdbc.username=foo
-Dcayenne.jdbc.password=bar
UPGRADING TO 3.0B1
* Per CAY-1281 pre-persist callback was renamed to post-add (while pre-persist now has a different meaning).
To upgrade your project, open it in the Modeler and agree to perform an automated upgrade.
UPGRADING TO 3.0M6
* Per CAY-1154, org.apache.cayenne.access.reveng package was renamed to org.apache.cayenne.map.naming. So, if you
use your own naming strategies, you should update as well.
* Per CAY-1161, custom columns feature in SelectQuery was deprecated. Consider switching to EJBQL as an alternative.
Custom columns support will likely go away completely after 3.0M6.
* Per CAY-1175, 'columnNameCapitalization' property of SQLTemplate now takes an enum, not a String.
Calling code should be fixed.
UPGRADING TO 3.0M5
* Per CAY-1127, query "name" property is no longer used as an internal cache key. This change should be transparent
to most users, as Cayenne generates a correct cache key internally when needed, however if a user code explicitly
depended on the value of the cache key, it should be updated to use something like this:
String cacheKey = query.getQueryMetadata(entityResolver).getCacheKey();
UPGRADING TO 3.0M4
* Per CAY-1049 API of the internal classes that participate in SelectQuery translation has changed in a way that
is not backwards compatible. This should not affect regular users, however if you implemented a custom DbAdapter,
check for classes that directly or indirectly inherit from QueryAssembler and QueryAssemblerHelper and fix them
if needed.
UPGRADING TO 3.0M3
* Java 5 is now required as a minimum for Cayenne Modeler and the Cayenne libraries.
* After the move to Java 5, generics have been implemented in many of the Cayenne APIs. If you don't use generics
in your project this should not affect you, but if you do you will need to review any new compiler errors or warnings.
The effect of generics is at compile time only, so their introduction will not change the runtime behaviour of
your application once compiled.
UPGRADING TO 3.0M2
* Lifecycle Callbacks require no setup:
Per CAY-843, lifecycle callback functionality is now built into DataContext and DataDomain,
so all the custom code to set them up is no longer needed. Also as a result of this change
'org.apache.cayenne.intercept' package is removed from Cayenne.
Further information can be found here: http://cayenne.apache.org/doc/lifecycle-callbacks.html
UPGRADING TO 3.0M1
* Jar files:
- all jar files now include version numbers in their names.
- "cayenne-nodeps.jar" is renamed to "cayenne-server-x.x.x.jar"
- "fat" cayenne.jar file that included dependencies is no longer distributed.
All dependencies that it contained are included as separate jars under
"cayenne-x.x.x/lib/third-party/". The new "cayenne-server-x.x.x.jar" plus
dependencies should be used in place of cayenne.jar.
- A new "cayenne-agent-x.x.x.jar" is included. It is used for class enhancement
with POJO's and JPA. "Classic" Cayenne users can ignore this file.
* Ant class generator is using what was called "version 1.2" by default. This means that if you were
using custom Velocity templates in 1.1 mode, you should either change the templates or specify 'version="1.1"'
in the buildfile explicitly.
* Cross-platform Modeler Startup is now done without a batch file or a shell script.
A "fat" CayenneModeler.jar is included in the "cayenne-x.x.x/bin" directory
and can be run either by double-clicking the jar (on platforms that support that)
or by running "java -jar CayenneModeler.jar".
* Note that FireBird adapter is no longer distributed with Cayenne. The one we had was half-working
and we could not support it anymore.
* DataContextTransactionEventListener, DataObjectTransactionEventListener, DataContextEvent all were deprecated
favor of callbacks. NOTE THAT THIS API WILL BE REMOVED IN THE FOLLOWING 3.0 MILESTONES.
* Long PK: Cayenne now supports "long" primary key generation (previously it only supported "int"). You may
have to change the existing PK lookup tables on some databases to take advantage of that (this is optional,
and is needed if you expect your PK to exceed maximum value of an "int" allowed in your database). E.g. on
MySQL you may run the following SQL:
ALTER TABLE AUTO_PK_SUPPORT CHANGE COLUMN NEXT_ID NEXT_ID BIGINT NOT NULL;
UPGRADING TO 2.0.x
Since 2.0, Cayenne is an Apache project, so all "org.objectstyle.*" java packages
were renamed to "org.apache.*" analogues. Since 1.2.x and 2.0.x release lines maintain
full compatibility with each other, differing only in package names, upgrading to 2.0.x
can be a first step in a safe upgrade to the latest version of Cayenne.
* Upgrading mapping files:
To upgrade the mapping files, open them in the new Modeler. You should see an upgrade
dialog. Once you confirm the upgrade
* Upgrading the code:
Replace "org.objectstyle." with "org.apache." everywhere in imports and do a clean
recompile.
* Upgrading logging configuration
If you are using custom logging configuration file, make sure that all the
Cayenne loggers are changed from "org.objectstyle" to "org.apache".