This is an automated email from the ASF dual-hosted git repository.
aadamchik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne-website.git
The following commit(s) were added to refs/heads/master by this push:
new 948926054 Update _index.html - many small text fixes
948926054 is described below
commit 948926054df92b9df71794d4fda52468bff21450
Author: Andrew Wetmore <[email protected]>
AuthorDate: Sat Jun 10 15:04:09 2023 -0300
Update _index.html - many small text fixes
Many minor fixes to improve readability
---
src/main/site/content/_index.html | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/main/site/content/_index.html
b/src/main/site/content/_index.html
index 97da9f363..1db77b4ca 100644
--- a/src/main/site/content/_index.html
+++ b/src/main/site/content/_index.html
@@ -97,20 +97,20 @@
<div class="tab-content px-lg-5" id="myTabContent">
<div class="tab-pane fade show active"
id="modeler" role="tabpanel" aria-labelledby="modeler-tab">
<h4>Modeler</h4>
- <p>Cayenne is distributed with
CayenneModeler - a complete GUI mapping tool that supports reverse-engineering
of RDBMS schemas, editing object-relational mapping projects, generation of
Java source code for the persistent objects and other functions.</p>
+ <p>Cayenne is distributed with
CayenneModeler - a complete GUI mapping tool that supports reverse-engineering
of RDBMS schemas, editing object-relational mapping projects, generating Java
source code for persistent objects and other functions.</p>
<img class="img-fluid mb-2"
src="img/cayenne-modeler1.png" alt="Cayenne Modeler" />
</div>
<div class="tab-pane fade" id="db-first-flow"
role="tabpanel" aria-labelledby="db-first-flow-tab">
<h4>DB-first-flow</h4>
- <p>Cayenne allows you to design your
data model in a single place - the database. Other layers (OR mapping and Java
objects) are synchronized automatically via CayenneModeler or a build script,
so you don't have to repeat yourself. Such approach is called "database-first".
It saves you development time and prevents errors by ensuring that your model
is in sync across multiple layers. It is also quite flexible. It works well
with common DB migrations frameworks like Liquibase or Flyw [...]
+ <p>Cayenne allows you to design your
data model in a single place - the database. Other layers (OR mapping and Java
objects) are synchronized automatically via CayenneModeler or a build script,
so you don't have to repeat yourself. Such an approach is called
"database-first". It saves you development time and prevents errors by ensuring
that your model is in sync across multiple layers. It is also quite flexible.
It works well with common DB migration frameworks like Liquibase or Fl [...]
</p>
</div>
<div class="tab-pane fade"
id="transparent-transactions" role="tabpanel"
aria-labelledby="transparent-transactions-tab">
<h4>Transparent transactions</h4>
<p>
- Most ORM frameworks require you
to manage transactions manually or with external tools like Spring. Also you
must always ensure you stay within transaction bounds when traversing
relationships between objects. Cayenne takes a notably different approach,
freeing you from writing lots of trivial code. Transaction management happens
automatically behind the scenes. Object graph can be expanded lazily on demand
without any special considerations.
+ Most ORM frameworks require you
to manage transactions manually or with external tools like Spring. Also you
must always ensure you stay within transaction bounds when traversing
relationships between objects. Cayenne takes a notably different approach,
freeing you from writing lots of trivial code. Transaction management happens
automatically behind the scenes. Object graphs can be expanded lazily on
demand, without any special considerations.
</p>
<p>
At the same time Cayenne works
well with external transaction managers. It also has its own transaction API
that can be used to run multiple operations atomically in regards to DB
commit/rollback. The good thing is that it is completely optional and should be
used only when needed.
@@ -119,19 +119,19 @@
<div class="tab-pane fade" id="objectcontext"
role="tabpanel" aria-labelledby="objectcontext-tab">
<h4>Object Context</h4>
<p>
- At the heart of Cayenne
persistence API lies ObjectContext. ObjectContext can be thought of as a unit
of work. It has its own copy of persistent objects. While vaguely similar to
JPA EntityManager, ObjectContext is closer to a version control client. It is
not connected to the database except when a read or write operation is in
progress, it doesn't hold on to any resources (such as DB connections), and
doesn't need to be closed.
+ At the heart of Cayenne's
persistence API lies ObjectContext. ObjectContext can be thought of as a unit
of work. It has its own copy of persistent objects. While vaguely similar to
JPA EntityManager, ObjectContext is closer to a version control client. It is
not connected to the database except when a read or write operation is in
progress, it doesn't hold on to any resources (such as DB connections), and
doesn't need to be closed.
</p>
<p>
- As a result ObjectContexts are
serializable and rather lightweight. Contexts can be nested (a child context
can read/write from/to parent without affecting the DB). There is even a
version of ObjectContext that can run in an entirely different JVM from the
main app, and communicate with the app via a binary web service.
+ As a result ObjectContexts are
serializable and rather lightweight. Contexts can be nested (a child context
can read/write from/to its parent without affecting the DB). There is even a
version of ObjectContext that can run in an entirely different JVM from the
main app, and communicate with the app via a binary web service.
</p>
</div>
<div class="tab-pane fade" id="extension-api"
role="tabpanel" aria-labelledby="extension-api-tab">
<h4>Extension API</h4>
<p>
- Cayenne stack is built around
a small dependency injection (DI) container responsible for configuring and
binding all framework services. It provides a simple API to define custom
implementations of core services and strategies or add extensions to the
existing ones (e.g. custom value types). Additionally many things can be
configured via system properties.
+ Cayenne stack is built around
a small dependency injection (DI) container responsible for configuring and
binding all framework services. It provides a simple API to define custom
implementations of core services and strategies or add extensions to the
existing ones (e.g. custom value types). Additionally, many things can be
configured via system properties.
</p>
<p>
- Cayenne is truly modular. The
above-mentioned DI container supports autoloading of extra modules from
classpath. Cayenne itself takes advantage of this, isolating various optional
features and integrations into optional modules. You can do the same with your
own code.
+ Cayenne is truly modular. The
above-mentioned DI container supports autoloading of extra modules from the
classpath. Cayenne itself takes advantage of this, isolating various optional
features and integrations into optional modules. You can do the same with your
own code.
</p>
</div>
<div class="tab-pane fade" id="generic-objects"
role="tabpanel" aria-labelledby="generic-objects-tab">
@@ -139,20 +139,20 @@
<p>
Traditional Java ORMs depend on
bytecode generation or dynamic proxies to "connect" persistent objects with the
framework. In constrast, Cayenne objects implement a simple API contract to
interact with the ORM runtime, but otherwise can be structured arbitrarily, not
requiring any annotation or "enhancement".
</p>
- <p>This opens up some interesting
possibilities. E.g. Cayenne provides a Map-based "generic" persistent object
that can be dynamically mapped to any entity. This means that ORM model can be
created in runtime without recompiling the code. Combined with DB
reverse-engineering feature, this allows building completely generic data tools
and services.
+ <p>This opens up some interesting
possibilities. E.g. Cayenne provides a Map-based "generic" persistent object
that can be dynamically mapped to any entity. This means that an ORM model can
be created in runtime without recompiling the code. Combined with the DB
reverse-engineering feature, this allows building completely generic data tools
and services.
</p>
</div>
<div class="tab-pane fade" id="data-encryption"
role="tabpanel" aria-labelledby="data-encryption-tab">
<h4>Data Encryption</h4>
<p>
- Traditionally protecting DB
data at rest stops at encrypting entire hard drive partitions. Cayenne goes a
few steps further, offering a more secure and flexible solution -
"cayenne-crypto" module with field-level data encryption.
+ Traditionally, protecting DB
data at rest stops at encrypting entire hard drive partitions. Cayenne goes a
few steps further, offering a more secure and flexible solution - the
"cayenne-crypto" module with field-level data encryption.
</p>
<p>
- You can designate any number
of columns in multiple tables in your model as encrypted, and Cayenne will
transparently encrypt and decrypt data with minimal overhead. Default
encryption algorithm is AES/CBC/PKCS#5 with 128 or 256-bit key. Other useful
features are key revocation, data compression, HMAC signatures.
+ You can designate any number
of columns in multiple tables in your model as encrypted, and Cayenne will
transparently encrypt and decrypt data with minimal overhead. The default
encryption algorithm is AES/CBC/PKCS#5 with a 128 or 256-bit key. Other useful
features are key revocation, data compression, and HMAC signatures.
</p>
<img class="img-fluid mb-2"
src="img/crypto-protocol.png" alt="Cayenne Crypto Protocol" />
</div>
</div>
</div>
</div>
-</section>
\ No newline at end of file
+</section>