📄 transactions.po
字号:
"literal> and database transaction until the \"view has been rendered\". This ""is especially useful in servlet applications that utilize a separate ""rendering phase after the request has been processed. Extending the database ""transaction until view rendering is complete is easy to do if you implement ""your own interceptor. However, it is not easily doable if you rely on EJBs ""with container-managed transactions, as a transaction will be completed when ""an EJB method returns, before rendering of any view can start. See the ""Hibernate website and forum for tips and examples around this <emphasis>Open ""Session in View</emphasis> pattern."#. Tag: title#: transactions.xml:135#, no-c-formatmsgid "Long conversations"msgstr "Transacciones de aplicación"#. Tag: para#: transactions.xml:137#, no-c-formatmsgid """The session-per-request pattern is not the only useful concept you can use ""to design units of work. Many business processes require a whole series of ""interactions with the user interleaved with database accesses. In web and ""enterprise applications it is not acceptable for a database transaction to ""span a user interaction. Consider the following example:"msgstr """El patrón sesión-por-petición no es el único concepto útil que puedes usar ""para diseñar unidades de trabajo. Muchos procesos de negocio requiere una ""serie completa de interacciones con el usuario intercaladas con accesos a ""base de datos. En aplicaciones web y de empresa no es aceptable que una ""transacción de base de datos se extienda a través de la interacción de un ""usuario. Considera el siguiente ejemplo:"#. Tag: para#: transactions.xml:147#, no-c-formatmsgid """The first screen of a dialog opens, the data seen by the user has been ""loaded in a particular <literal>Session</literal> and database transaction. ""The user is free to modify the objects."msgstr """Se abre la primera pantalla de un diálogo, los datos vistos por el usuario ""han sido cargados en una <literal>Session</literal> y transacción de base de ""datos particular. El usuario es libre de modificar los objetos."#. Tag: para#: transactions.xml:154#, no-c-formatmsgid """The user clicks \"Save\" after 5 minutes and expects his modifications to be ""made persistent; he also expects that he was the only person editing this ""information and that no conflicting modification can occur."msgstr """El usuario hace click en \"Salvar\" después de 5 minutos y espera que sus ""modificaciones sean hechas persistentes. También espera que él sea la única ""persona editando esta información y que no puede ocurrir ninguna ""modificación en conflicto."#. Tag: para#: transactions.xml:162#, no-c-formatmsgid """We call this unit of work, from the point of view of the user, a long ""running <emphasis>conversation</emphasis> (or <emphasis>application ""transaction</emphasis>). There are many ways how you can implement this in ""your application."msgstr """Llamamos a esto unidad de trabajo, desde el punto de vista del usuario, una ""larga <emphasis>transacción de aplicación</emphasis> ejecutándose. Hay ""muchas formas en que puedes implementar esto en tu aplicación."#. Tag: para#: transactions.xml:168#, no-c-formatmsgid """A first naive implementation might keep the <literal>Session</literal> and ""database transaction open during user think time, with locks held in the ""database to prevent concurrent modification, and to guarantee isolation and ""atomicity. This is of course an anti-pattern, since lock contention would ""not allow the application to scale with the number of concurrent users."msgstr """Una primera implementación ingenua podría mantener abierta la ""<literal>Session</literal> y la transacción de base de datos durante el ""tiempo de pensar del usuario, con bloqueos tomados en la base de datos para ""prevenir la modificación concurrente, y para garantizar aislamiento y ""atomicidad. Esto es, por supuesto, un antipatrón, ya que la contención de ""bloqueo no permitiría a la aplicación escalar con el número de usuarios ""concurrentes."#. Tag: para#: transactions.xml:176#, no-c-formatmsgid """Clearly, we have to use several database transactions to implement the ""converastion. In this case, maintaining isolation of business processes ""becomes the partial responsibility of the application tier. A single ""conversation usually spans several database transactions. It will be atomic ""if only one of these database transactions (the last one) stores the updated ""data, all others simply read data (e.g. in a wizard-style dialog spanning ""several request/response cycles). This is easier to implement than it might ""sound, especially if you use Hibernate's features:"msgstr """Claramente, tenemos que usar muchas transacciones de base de datos para ""implementar la transacción de aplicación. En este caso, mantener el ""aislamiento de los procesos de negocio se vuelve una responsabilidad parcial ""de la capa de aplicación. Una sola transacción de aplicación usualmente ""abarca varias transacciones de base de datos. Será atómica si sólo una de ""estas transacciones de base de datos (la última) almacena los datos ""actualizados, todas las otras simplemente leen datos (por ejemplo, en un ""diálogo estilo-asistente abarcando muchos ciclos petición/respuesta). Esto ""es más fácil de implementar de lo que suena, especialmente si usas las ""funcionalidades de Hibernate:"#. Tag: para#: transactions.xml:189#, no-c-formatmsgid """<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic ""optimistic concurrency control for you, it can automatically detect if a ""concurrent modification occured during user think time. Usually we only ""check at the end of the conversation."msgstr """<emphasis>Versionado Automático</emphasis> - Hibernate puede llevar un ""control automático de concurrencia optimista por ti, puede detectar ""automáticamente si una modificación concurrente ha ocurrido durante el ""tiempo de pensar del usuario."#. Tag: para#: transactions.xml:197#, no-c-formatmsgid """<emphasis>Detached Objects</emphasis> - If you decide to use the already ""discussed <emphasis>session-per-request</emphasis> pattern, all loaded ""instances will be in detached state during user think time. Hibernate allows ""you to reattach the objects and persist the modifications, the pattern is ""called <emphasis>session-per-request-with-detached-objects</emphasis>. ""Automatic versioning is used to isolate concurrent modifications."msgstr """<emphasis>Objetos Separados</emphasis> - Si decides usar el ya discutido ""patrón de <emphasis>sesión-por-petición</emphasis>, todas las instancias ""cargadas estarán en estado separado durante el tiempo de pensar del usuario. ""Hibernate te permite volver a unir los objetos y hacer persistentes las ""modificaciones. El patrón se llama <emphasis>sesión-por-petición-con-objetos-""separados</emphasis>. Se usa versionado automático para aislar las ""modificaciones concurrentes."#. Tag: para#: transactions.xml:207#, no-c-formatmsgid """<emphasis>Extended (or Long) Session</emphasis> - The Hibernate ""<literal>Session</literal> may be disconnected from the underlying JDBC ""connection after the database transaction has been committed, and ""reconnected when a new client request occurs. This pattern is known as ""<emphasis>session-per-conversation</emphasis> and makes even reattachment ""unnecessary. Automatic versioning is used to isolate concurrent ""modifications and the <literal>Session</literal> is usually not allowed to ""be flushed automatically, but explicitely."msgstr """<emphasis>Sesión Larga</emphasis> - La <literal>Session</literal> de ""Hibernate puede ser desconectada de la conexión JDBC subyacente después que ""se haya sido comprometida la transacción de base de datos, y reconectada ""cuando ocurra una nueva petición del cliente. Este patrón es conocido como ""<emphasis>sesión-por-transacción-de-aplicación</emphasis> y hace la re-unión ""innecesaria. Para aislar las modificaciones concurrentes se usa el ""versionado automático."#. Tag: para#: transactions.xml:220#, no-c-formatmsgid """Both <emphasis>session-per-request-with-detached-objects</emphasis> and ""<emphasis>session-per-conversation</emphasis> have advantages and ""disadvantages, we discuss them later in this chapter in the context of ""optimistic concurrency control."msgstr """Tanto <emphasis>sesión-por-petición-con-objetos-separados</emphasis> como ""<emphasis>sesión-por-transacción-de-aplicación</emphasis>, ambas tienen ""ventajas y desventajas, las discutimos más adelante en este capítulo en el ""contexto del control optimista de concurrencia."#. Tag: title#: transactions.xml:229#, no-c-formatmsgid "Considering object identity"msgstr "Considerando la identidad del objeto"#. Tag: para#: transactions.xml:231#, no-c-formatmsgid """An application may concurrently access the same persistent state in two ""different <literal>Session</literal>s. However, an instance of a persistent ""class is never shared between two <literal>Session</literal> instances. ""Hence there are two different notions of identity:"msgstr """Una aplicación puede acceder concurrentemente a el mismo estado persistente ""en dos <literal>Session</literal>s diferentes. Sin embargo, una instancia de ""una clase persistente nunca se comparte entre dos instancias de ""<literal>Session</literal>. Por lo tanto existen dos nociones diferentes de ""identidad:"#. Tag: term#: transactions.xml:240#, no-c-formatmsgid "Database Identity"msgstr "Identidad de Base de Datos"#. Tag: literal#: transactions.xml:243#, no-c-formatmsgid "foo.getId().equals( bar.getId() )"msgstr "foo.getId().equals( bar.getId() )"#. Tag: term#: transactions.xml:248#, no-c-formatmsgid "JVM Identity"msgstr "Identidad JVM"#. Tag: literal#: transactions.xml:251#, no-c-formatmsgid "foo==bar"msgstr "foo==bar"#. Tag: para#: transactions.xml:257#, fuzzy, no-c-formatmsgid """Then for objects attached to a <emphasis>particular</emphasis> ""<literal>Session</literal> (i.e. in the scope of a <literal>Session</""literal>) the two notions are equivalent, and JVM identity for database ""identity is guaranteed by Hibernate. However, while the application might ""concurrently access the \"same\" (persistent identity) business object in ""two different sessions, the two instances will actually be \"different""\" (JVM identity). Conflicts are resolved using (automatic versioning) at ""flush/commit time, using an optimistic approach."msgstr """Entonces para objetos unidos a una <literal>Session</literal><emphasis>en ""particular</emphasis> (es decir en el ámbito de una <literal>Session</""literal>) las dos nociones son equivalentes, y la identidad JVM para la ""identidad de base de datos está garantizada por Hibernate. Sin embargo, ""mientras la aplicación acceda concurrentemente al \"mismo\" (identidad ""persistente) objeto de negocio en dos sesiones diferentes, las dos ""instancias serán realmente \"diferentes\" (identidad JVM). Los conflictos se ""resuelven (con versionado automático) en tiempo de limpieza (flush) usando ""un enfoque optimista."#. Tag: para#: transactions.xml:266#, no-c-formatmsgid """This approach leaves Hibernate and the database to worry about concurrency; ""it also provides the best scalability, since guaranteeing identity in single-""threaded units of work only doesn't need expensive locking or other means of ""synchronization. The application never needs to synchronize on any business ""object, as long as it sticks to a single thread per <literal>Session</""literal>. Within a <literal>Session</literal> the application may safely use ""<literal>==</literal> to compare objects."msgstr """Este enfoque deja que Hibernate y la base de datos se preocupen sobre la ""concurrencia. Además provee la mejor escalabilidad, ya que garantizando la ""identidad un unidades de trabajo monohebra no se necesitan bloqueos caros u ""otros medios de sincronización. La aplicación nunca necesita sincronizar ""sobre ningún objeto de negocio, siempre que se apegue a una sola hebra por ""<literal>Session</literal>. Dentro de una <literal>Session</literal> la ""aplicación puede usar con seguridad <literal>==</literal> para comparar ""objetos."#. Tag: para#: transactions.xml:275#, no-c-formatmsgid """However, an application that uses <literal>==</literal> outside of a ""<literal>Session</literal>, might see unexpected results. This might occur ""even in some unexpected places, for example, if you put two detached ""instances into the same <literal>Set</literal>. Both might have the same ""database identity (i.e. they represent the same row), but JVM identity is by ""definition not guaranteed for instances in detached state. The developer has ""to override the <literal>equals()</literal> and <literal>hashCode()</"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -