You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by bu...@apache.org on 2016/12/15 18:21:46 UTC

svn commit: r1002871 - in /websites/staging/cayenne/trunk/content: ./ 2016/12/ 2016/12/cayenne-40M4-released.html

Author: buildbot
Date: Thu Dec 15 18:21:45 2016
New Revision: 1002871

Log:
Staging update by buildbot for cayenne

Added:
    websites/staging/cayenne/trunk/content/2016/12/
    websites/staging/cayenne/trunk/content/2016/12/cayenne-40M4-released.html
Modified:
    websites/staging/cayenne/trunk/content/   (props changed)

Propchange: websites/staging/cayenne/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Dec 15 18:21:45 2016
@@ -1 +1 @@
-1774244
+1774504

Added: websites/staging/cayenne/trunk/content/2016/12/cayenne-40M4-released.html
==============================================================================
--- websites/staging/cayenne/trunk/content/2016/12/cayenne-40M4-released.html (added)
+++ websites/staging/cayenne/trunk/content/2016/12/cayenne-40M4-released.html Thu Dec 15 18:21:45 2016
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="en">
+<head>
+<title> | Apache Cayenne</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="keywords" content=" apache cayenne, object relational mapping, open source orm, orm">
+<meta name="description" content=" Apache Cayenne is a powerful, full-featured, open-source object relational mapping framework created for developers working with relational databases.">
+<link rel="stylesheet" type="text/css" media="screen, projection" href="/css/styles.css">
+<link rel="stylesheet" type="text/css" media="print" href="/css/print.css">
+<link rel="shortcut icon" href="/img/favicon.ico" type="image/ico">
+<script type="text/javascript" src="/js/scripts.js"></script>
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</head>
+<body>
+<div id="wrap"><div id="wrap-inner">
+
+<div id="header">
+	<h1><a href="/" title="Return to Apache Cayenne home"><span>The Apache Cayenne Project</span></a></h1>
+	<h2><a href="http://www.apache.org" title="The Apache Software Foundation"><span>The Apache Software Foundation</span></a></h2>
+</div>
+
+<div id="container">
+
+ 
+<div id="sidebar">
+<ul id="nav">
+	<li><a href="/about.html">About</a>
+		<ul>
+			<li><a href="/why-cayenne.html">Why Cayenne?</a></li>
+			<li><a href="/download.html">Download</a></li>
+			<li><a href="/success-stories.html">Success Stories</a></li>
+			<li><a href="/support.html">Support</a></li>
+		</ul>
+	</li>
+	<li><a href="/docs/index.html">Documentation</a>
+		<ul>
+			<li><a href="/docs/4.0/tutorial/index.html">Getting Started (4.0)</a></li>
+			<li class="trigger"><a href="/docs/4.0/index.html">Version 4.0 (alpha)</a>
+				<ul>
+					<li><a href="/docs/4.0/cayenne-guide/index.html">Cayenne Guide</a></li>
+					<li><a href="/docs/4.0/tutorial/index.html">Tutorial</a></li>
+					<li><a href="/docs/4.0/tutorial-rop/index.html">ROP Tutorial</a></li>
+					<li><a href="/docs/4.0/upgrade-guide/index.html">Upgrade Guide</a></li>
+					<li><a href="/docs/4.0/api/index.html">JavaDoc</a></li>
+				</ul>
+			</li>
+			<li class="trigger"><a href="/docs/3.1/index.html">Version 3.1 (stable)</a>
+				<ul>
+					<li><a href="/docs/3.1/cayenne-guide/index.html">Cayenne Guide</a></li>
+					<li><a href="/docs/3.1/tutorial/index.html">Tutorial</a></li>
+					<li><a href="/docs/3.1/tutorial-rop/index.html">ROP Tutorial</a></li>
+					<li><a href="/docs/3.1/upgrade-guide/index.html">Upgrade Guide</a></li>
+					<li><a href="/docs/3.1/api/index.html">JavaDoc</a></li>
+				</ul>
+			</li>
+			<li><a href="/docs/legacy.html">Legacy Releases</a>
+			</li>
+		</ul>
+	</li>
+	<li><a href="/collaboration.html">Collaboration</a>
+		<ul>
+			<li><a href="http://issues.apache.org/jira/browse/CAY">Bug/Feature Tracker</a></li>
+			<li><a href="/mailing-lists.html">Mailing Lists</a></li>
+			<li><a href="/dev/code-repository.html">Code Repository</a></li>
+			<li><a href="/dev/index.html">Developer Guide</a></li>
+			<li><a href="/how-can-i-help.html">How Can I Help?</a></li>
+			<li><a href="/contributors.html">Contributors</a></li>
+			<li><a href="/thanks.html">Thanks</a></li>
+		</ul>
+	</li>
+</ul>
+</div>
+
+
+<hr>
+<div id="content">
+       <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+<h2 id="cayenne-40-milestone-4-released">Cayenne 4.0 Milestone 4 Released<a class="headerlink" href="#cayenne-40-milestone-4-released" title="Permanent link">&para;</a></h2>
+<p><em>Dec 13, 2016</em> </p>
+<p>The new M4 milestone release of Apache Cayenne features a number of important things:</p>
+<ul>
+<li>Stabilizes database reverse-engineering tools needed for DB-first ORM flow.</li>
+<li>Plugs holes and omissions in the fluent query API</li>
+<li>Expands encryption capabilities to all data types.</li>
+<li>Improves transaction management API.</li>
+<li>Provides alternative binary protocols for ROP, greatly improving its performance. </li>
+<li>Includes a new Modeler welcome screen</li>
+<li>And of course fixes numerous bug fixes, updates docs, etc., etc. </li>
+</ul>
+<p>Cayenne can be downloaded from <a href="/download.html">here</a>. Make sure to consult <a href="https://github.com/apache/cayenne/blob/4.0.M4/docs/doc/src/main/resources/UPGRADE.txt">UPGRADE.txt</a> before upgrading. </p>
+<p>Before we start discussing individual features, a few words on the big picture of our development effort. Cayenne 4.0 is quickly approaching "beta" status. There's a good chance that the following release will be feature-complete and we will enter "beta" and associated code freeze of the runtime framework. </p>
+<p>Now the new things in a bit more detail:</p>
+<h3 id="fluent-query-api">Fluent query API<a class="headerlink" href="#fluent-query-api" title="Permanent link">&para;</a></h3>
+<p>These fluent queries are new in M4:</p>
+<p><em>SQLExec</em></p>
+<div class="codehilite"><pre><span class="c1">// insert</span>
+<span class="k">int</span> <span class="n">inserted</span> <span class="o">=</span> <span class="n">SQLExec</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="s">&quot;INSERT INTO ARTIST (ARTIST_ID, ARTIST_NAME) VALUES (#bind($id), #bind($name))&quot;</span><span class="p">).</span><span class="n">paramsArray</span><span class="p">(</span><span class="mh">55</span><span class="p">,</span> <span class="s">&quot;a3&quot;</span><span class="p">).</span><span class="n">update</span><span class="p">(</span><span class="k">context</span><span class="p">);</span>
+
+<span class="c1">// update</span>
+<span class="k">int</span> <span class="n">updated</span> <span class="o">=</span> <span class="n">SQLExec</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="s">&quot;UPDATE ARTIST SET ARTIST_NAME = &#39;b3&#39; WHERE ARTIST_NAME = &#39;a3&#39;&quot;</span><span class="p">).</span><span class="n">update</span><span class="p">(</span><span class="k">context</span><span class="p">);</span>
+</pre></div>
+
+
+<p><em>MappedSelect</em></p>
+<div class="codehilite"><pre><span class="n">List</span><span class="o">&lt;</span><span class="n">Artist</span><span class="o">&gt;</span> <span class="n">artists</span> <span class="p">=</span> <span class="n">MappedSelect</span><span class="p">.</span><span class="n">query</span><span class="p">(</span>&quot;<span class="n">SelectArtists</span>&quot;<span class="p">,</span> <span class="n">Artist</span><span class="p">.</span><span class="n">class</span><span class="p">).</span><span class="n">param</span><span class="p">(</span>&quot;<span class="n">name</span>&quot;<span class="p">,</span> &quot;<span class="n">artist1</span>&quot;<span class="p">).</span><span class="n">select</span><span class="p">(</span><span class="n">context</span><span class="p">);</span>
+</pre></div>
+
+
+<p><em>MappedExec</em></p>
+<div class="codehilite"><pre><span class="n">int</span><span class="p">[]</span> <span class="n">updated</span> <span class="p">=</span> <span class="n">MappedExec</span><span class="p">.</span><span class="n">query</span><span class="p">(</span>&quot;<span class="n">UpdateArtists</span>&quot;<span class="p">).</span><span class="n">param</span><span class="p">(</span>&quot;<span class="n">name</span>&quot;<span class="p">,</span> &quot;<span class="n">artist2</span>&quot;<span class="p">).</span><span class="n">update</span><span class="p">(</span><span class="n">context</span><span class="p">);</span>
+</pre></div>
+
+
+<p><em>ProcedureCall</em></p>
+<div class="codehilite"><pre><span class="c1">// select</span>
+<span class="n">List</span><span class="o">&lt;</span><span class="n">Artist</span><span class="o">&gt;</span> <span class="n">artists</span> <span class="o">=</span> <span class="n">ProcedureCall</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="s">&quot;select_sp&quot;</span><span class="p">,</span> <span class="n">Artist</span><span class="p">.</span><span class="k">class</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">param</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="s">&quot;Artist&quot;</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">param</span><span class="p">(</span><span class="s">&quot;paintingPrice&quot;</span><span class="p">,</span> <span class="mh">3000</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">limit</span><span class="p">(</span><span class="mh">2</span><span class="p">).</span><span class="n">select</span><span class="p">(</span><span class="k">context</span><span class="p">);</span>
+
+<span class="c1">// update</span>
+<span class="k">int</span> <span class="n">updated</span> <span class="o">=</span> <span class="n">ProcedureCall</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="s">&quot;update_sp&quot;</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">param</span><span class="p">(</span><span class="s">&quot;paintingPrice&quot;</span><span class="p">,</span> <span class="mh">3000</span><span class="p">).</span><span class="n">update</span><span class="p">(</span><span class="k">context</span><span class="p">);</span>
+
+<span class="c1">// call and get out parameters</span>
+<span class="k">int</span> <span class="n">outParam</span> <span class="o">=</span> <span class="n">ProcedureCall</span><span class="p">.</span><span class="n">query</span><span class="p">(</span><span class="s">&quot;out_sp&quot;</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">param</span><span class="p">(</span><span class="s">&quot;name&quot;</span><span class="p">,</span> <span class="s">&quot;Artist&quot;</span><span class="p">)</span>
+                <span class="p">.</span><span class="n">call</span><span class="p">(</span><span class="k">context</span><span class="p">).</span><span class="n">getOutParam</span><span class="p">(</span><span class="s">&quot;artist_out&quot;</span><span class="p">);</span>
+</pre></div>
+
+
+<h3 id="reverse-engineering-improvements">Reverse Engineering Improvements<a class="headerlink" href="#reverse-engineering-improvements" title="Permanent link">&para;</a></h3>
+<p>There are a lot of improvements and bug fixes for reverse engineering functionality. There's more work to do, but the API is starting to stabilize and the tools have become very usable. Follow this <a href="docs/4.0/cayenne-guide/re-introduction.html">link</a> to learn how to automate and control DB-First ORM flow.</p>
+<h3 id="cayenne-crypto-improvements">Cayenne Crypto Improvements<a class="headerlink" href="#cayenne-crypto-improvements" title="Permanent link">&para;</a></h3>
+<p>Adding support for mapping encrypted columns to numbers, Strings, etc.</p>
+<h3 id="transaction-control">Transaction control<a class="headerlink" href="#transaction-control" title="Permanent link">&para;</a></h3>
+<p>Added TransactionListener to allow for better control of manual transactions. </p>
+<h3 id="rop-improvements">ROP Improvements<a class="headerlink" href="#rop-improvements" title="Permanent link">&para;</a></h3>
+<p>With M4 it's much easier to plug external tools for ROP connectivity and serialization purposes. Jetty HTTP/1.1 and HTTP/2 Client and Protostuff have been already added to the Cayenne and are supported out of the box.</p>
+<h3 id="a-full-list-of-changes-in-this-release">A full list of changes in this release:<a class="headerlink" href="#a-full-list-of-changes-in-this-release" title="Permanent link">&para;</a></h3>
+<ul>
+<li>CAY-2051 Applying new Reverse Engineering to the Modeler</li>
+<li>CAY-2053 SQLExec fluent query API</li>
+<li>CAY-2060 Replace Query objects in DataMap with query descriptors</li>
+<li>CAY-2062 MappedSelect and MappedExec fluent query API</li>
+<li>CAY-2063 ProcedureCall fluent query API</li>
+<li>CAY-2065 Pluggable serialization and connectivity layers for ROP</li>
+<li>CAY-2073 Ordering.orderedList methods</li>
+<li>CAY-2074 Support for catalogs in stored procedures</li>
+<li>CAY-2076 Implement Jetty HTTP/1.1 and HTTP/2 Client support for ROP Client</li>
+<li>CAY-2083 Implement Protostuff as serialization service for Cayenne ROP</li>
+<li>CAY-2090 Untangle HttpRemoteService from ServiceContext thread local setup</li>
+<li>CAY-2100 Add supporting generated keys for PostgreSQL</li>
+<li>CAY-2102 EJBQL: db: path not supported in select columns</li>
+<li>CAY-2103 cayenne-crypto: support for mapping non-String and non-binary types</li>
+<li>CAY-2106 cayenne-crypto: allow DI contribution of type converters inside ValueTransformerFactory</li>
+<li>CAY-2107 cayenne-crypto: Lazy initialization of crypto subsystem</li>
+<li>CAY-2111 Unbind transaction object from the current thread for iterated queries</li>
+<li>CAY-2112 Expose callback for "performInTransaction"</li>
+<li>CAY-2113 cdbimport: Reverse-engineering reinstates previously ignored columns</li>
+<li>CAY-2114 cdbimport: object layer settings are not respected</li>
+<li>CAY-2115 DbLoader - allow loading DataMap without Obj layer</li>
+<li>CAY-2116 Split schema synchronization code in a separate module</li>
+<li>CAY-2118 cdbimport: drop support for the old style of table filtering</li>
+<li>CAY-2129 Modeler: reengineer dialog improvements</li>
+<li>CAY-2130 Stripping common name prefixes on reverse engineering</li>
+<li>CAY-2132 Adding SybaseSelectTranslator to support TOP/DISTINCT TOP in limited queries</li>
+<li>CAY-2133 ObjectNameGenerator refactoring - unifying relationship name generation</li>
+<li>CAY-2135 cdbimport: reset DbEntity catalogs / schemas to DataMap defaults</li>
+<li>CAY-2136 Allow Ordering.orderedList(…) methods to accept a Collection rather than only a List</li>
+<li>CAY-2160 Modeler: new welcome screen</li>
+</ul>
+<h3 id="bug-fixes">Bug Fixes:<a class="headerlink" href="#bug-fixes" title="Permanent link">&para;</a></h3>
+<ul>
+<li>CAY-2016 cdbimport: Rename table with toMany relationship causes migration error</li>
+<li>CAY-2064 Issue with BeanAccessor for classes with complex inheritance</li>
+<li>CAY-2066 Fixes for inner enums handling in ExtendedTypeMap</li>
+<li>CAY-2067 Cayenne 4.0 connection pool is occasionally running out of connections</li>
+<li>CAY-2070 Modeler sync function adds extraneous ObjRelationships inside the class hierarchy</li>
+<li>CAY-2078 Client code gen bug. Unnecessary DataMap class generation setting datamap gen to false.</li>
+<li>CAY-2080 Cayenne doesn't pick up reverse engineering file changes</li>
+<li>CAY-2084 ObjectIdQuery - no cache access polymorphism</li>
+<li>CAY-2086 SelectById.selectFirst stack overflow</li>
+<li>CAY-2087 PostCommitFilter is confused about changes made by Pre listeners</li>
+<li>CAY-2089 HTTP connections aren't always closed in new ROP implementation</li>
+<li>CAY-2097 NullPointerException while updating relationships for entities with vertical inheritance</li>
+<li>CAY-2101 DataContext.currentSnapshot() doesn't set snapshot entity name</li>
+<li>CAY-2105 Add missing elements to the reverseEngineering.xsd</li>
+<li>CAY-2108 cayenne-di: StackOverflow for decorator that takes Provider of the delegate</li>
+<li>CAY-2110 Obfuscated exception when processing iterated results</li>
+<li>CAY-2119 ProjectUpgrader test failure (Windows)</li>
+<li>CAY-2122 Vertical Inheritance: Cannot Insert Record For Implementing Class with Attribute And Relationship</li>
+<li>CAY-2125 SchemaUpdateStrategy doesn't work with multiple DataNodes</li>
+<li>CAY-2126 Modeler cannot upgrade project from v7 to v9</li>
+<li>CAY-2128 Modeler stored procedures are not imported</li>
+<li>CAY-2131 Modeler NullPointerException in reverse engineering when importing different catalogs in one datamap</li>
+<li>CAY-2138 NVARCHAR, LONGNVARCHAR and NCLOB types are missing from Firebird types.xml</li>
+<li>CAY-2141 Disjoint-by-id prefetch generates repeating ID conditions</li>
+<li>CAY-2143 NPE in BaseSchemaUpdateStrategy</li>
+<li>CAY-2144 cdbimport always fails for databases which don't support catalogs</li>
+<li>CAY-2146 Vertical inheritance: record still inserted into parent db table when child validation fails</li>
+<li>CAY-2148 Failure upgrading from 3.1 to M4</li>
+<li>CAY-2150 UI bug: PK generation custom sequence is getting reset</li>
+<li>CAY-2151 Migrate Database Schema: issue when no db is specified</li>
+<li>CAY-2153 Modeler Exception in save action after reverse engineering some complex DB schema</li>
+<li>CAY-2154 Migrate db: queries order</li>
+</ul>
+       <hr>
+       <p id="footer">Copyright &#169; 2001-2016 Apache Software Foundation. Apache Cayenne, Cayenne, Apache, the Apache feather logo, and the Apache Cayenne project logo are trademarks of The Apache Software Foundation. <a href="/privacy-policy.html">Privacy policy</a>.
+</div>
+</div>
+
+</div></div>
+</body>
+</html>