📄 transactions.po
字号:
"\n"" tx.commit();\n""}\n""catch (RuntimeException e) {\n"" if (tx != null) tx.rollback();\n"" throw e; // or display error message\n""}\n""finally {\n"" sess.close();\n""}]]>"msgstr ""#. Tag: para#: transactions.xml:424#, no-c-formatmsgid """You don't have to <literal>flush()</literal> the <literal>Session</literal> ""explicitly - the call to <literal>commit()</literal> automatically triggers ""the synchronization (depending upon the <link linkend=\"objectstate-flushing""\">FlushMode</link> for the session. A call to <literal>close()</literal> ""marks the end of a session. The main implication of <literal>close()</""literal> is that the JDBC connection will be relinquished by the session. ""This Java code is portable and runs in both non-managed and JTA environments."msgstr """No tienes que limpiar con <literal>flush()</literal> la <literal>Session</""literal> explícitamente - la llamada a <literal>commit()</literal> ""automáticamente dispara la sincronización. Una llamada a <literal>close()</""literal> marca el fin de una sesión. La principal implicación de ""<literal>close()</literal> es que la conexión JDBC será abandonada por la ""sesión."#. Tag: para#: transactions.xml:433#, no-c-formatmsgid """A much more flexible solution is Hibernate's built-in \"current session\" ""context management, as described earlier:"msgstr """Este código Java es portable y se ejecuta tanto en entornos no manejados ""como en entornos JTA."#. Tag: programlisting#: transactions.xml:438#, no-c-formatmsgid """<![CDATA[// Non-managed environment idiom with getCurrentSession()\n""try {\n"" factory.getCurrentSession().beginTransaction();\n""\n"" // do some work\n"" ...\n""\n"" factory.getCurrentSession().getTransaction().commit();\n""}\n""catch (RuntimeException e) {\n"" factory.getCurrentSession().getTransaction().rollback();\n"" throw e; // or display error message\n""}]]>"msgstr ""#. Tag: para#: transactions.xml:440#, no-c-formatmsgid """You will very likely never see these code snippets in a regular application; ""fatal (system) exceptions should always be caught at the \"top\". In other ""words, the code that executes Hibernate calls (in the persistence layer) and ""the code that handles <literal>RuntimeException</literal> (and usually can ""only clean up and exit) are in different layers. The current context ""management by Hibernate can significantly simplify this design, as all you ""need is access to a <literal>SessionFactory</literal>. Exception handling is ""discussed later in this chapter."msgstr """Muy probablemente nunca veas este idioma en código de negocio en una ""aplicación normal; las excepciones fatales (sistema) deben siempre ser ""capturadas en la \"cima\". En otras palabras, el código que ejecuta las ""llamadas de Hibernate (en la capa de persistencia) y el código que maneja ""<literal>RuntimeException</literal> (y usualmente sólo puede limpiar y ""salir) están en capas diferentes. Esto puede ser un desafío de diseñarlo tú ""mismo y debes usar los servicios de contenedor J2EE/EJB en cuanto estuviesen ""disponibles. El manejo de excepciones se dicute más adelante en este ""capítulo."#. Tag: para#: transactions.xml:450#, no-c-formatmsgid """Note that you should select <literal>org.hibernate.transaction.""JDBCTransactionFactory</literal> (which is the default), and for the second ""example <literal>\"thread\"</literal> as your <literal>hibernate.""current_session_context_class</literal>."msgstr """Nota que debes seleccionar <literal>org.hibernate.transaction.""JDBCTransactionFactory</literal> (que es el por defecto)."#. Tag: title#: transactions.xml:459#, no-c-formatmsgid "Using JTA"msgstr "Usando JTA"#. Tag: para#: transactions.xml:461#, no-c-formatmsgid """If your persistence layer runs in an application server (e.g. behind EJB ""session beans), every datasource connection obtained by Hibernate will ""automatically be part of the global JTA transaction. You can also install a ""standalone JTA implementation and use it without EJB. Hibernate offers two ""strategies for JTA integration."msgstr """Si tu capa de persistencia se ejecuta en un servidor de aplicaciones (por ""ejemplo, detrás de beans de sesión EJB), cada conexión de datasource ""obtenida por Hibernate será parte automáticamente de la transacción JTA ""global. Hibernate ofrece dos estrategias para esta integración."#. Tag: para#: transactions.xml:468#, no-c-formatmsgid """If you use bean-managed transactions (BMT) Hibernate will tell the ""application server to start and end a BMT transaction if you use the ""<literal>Transaction</literal> API. So, the transaction management code is ""identical to the non-managed environment."msgstr """Si usas transacciones gestionadas-por-bean (BMT) Hibernate le dirá al ""servidor de aplicaciones que comience y finalice una transacción BMT si usas ""la API de <literal>Transaction</literal>. De modo que, el código de gestión ""de la transacción es idéntico al de un entorno no manejado."#. Tag: programlisting#: transactions.xml:474#, no-c-formatmsgid """<![CDATA[// BMT idiom\n""Session sess = factory.openSession();\n""Transaction tx = null;\n""try {\n"" tx = sess.beginTransaction();\n""\n"" // do some work\n"" ...\n""\n"" tx.commit();\n""}\n""catch (RuntimeException e) {\n"" if (tx != null) tx.rollback();\n"" throw e; // or display error message\n""}\n""finally {\n"" sess.close();\n""}]]>"msgstr ""#. Tag: para#: transactions.xml:476#, no-c-formatmsgid """If you want to use a transaction-bound <literal>Session</literal>, that is, ""the <literal>getCurrentSession()</literal> functionality for easy context ""propagation, you will have to use the JTA <literal>UserTransaction</literal> ""API directly:"msgstr """Con CMT, la demarcación de la transacción se hace en descriptores de ""despliegue de beans de sesión, no programáticamente. Si no quieres limpiar ""(flush) y cerrar manualmente la <literal>Session</literal> por ti mismo, ""solamente establece <literal>hibernate.transaction.flush_before_completion</""literal> a <literal>true</literal>, <literal>hibernate.connection.""release_mode</literal> a <literal>after_statement</literal> o <literal>auto</""literal> y <literal>hibernate.transaction.auto_close_session</literal> a ""<literal>true</literal>. Hibernate limpiará y cerrará entonces ""automáticamente la <literal>Session</literal> para ti. Lo único que resta es ""deshacer (rollback) la transacción cuando ocurra una excepción. ""Afortunadamente, en un bean CMT, incluso esto ocurre automáticamente, ya que ""una <literal>RuntimeException</literal> no manejada disparada por un método ""de un bean de sesión le dice al contenedor que ponga a deshacer la ""transacción global. <emphasis>Esto significa que, en CMT, no necesitas usar ""en absoluto la API de <literal>Transaction</literal> de Hibernate.</emphasis>"#. Tag: programlisting#: transactions.xml:482#, no-c-formatmsgid """<![CDATA[// BMT idiom with getCurrentSession()\n""try {\n"" UserTransaction tx = (UserTransaction)new InitialContext()\n"" .lookup(\"java:comp/UserTransaction\");\n""\n"" tx.begin();\n""\n"" // Do some work on Session bound to transaction\n"" factory.getCurrentSession().load(...);\n"" factory.getCurrentSession().persist(...);\n""\n"" tx.commit();\n""}\n""catch (RuntimeException e) {\n"" tx.rollback();\n"" throw e; // or display error message\n""}]]>"msgstr ""#. Tag: para#: transactions.xml:484#, no-c-formatmsgid """With CMT, transaction demarcation is done in session bean deployment ""descriptors, not programatically, hence, the code is reduced to:"msgstr """Nota que debes elegir <literal>org.hibernate.transaction.""JTATransactionFactory</literal> en un bean de sesión BMT, y <literal>org.""hibernate.transaction.CMTTransactionFactory</literal> en un bean de sesión ""CMT, cuando configures la fábrica de transacciones de Hibernate. Recuerda ""además establecer <literal>org.hibernate.transaction.manager_lookup_class</""literal>."#. Tag: programlisting#: transactions.xml:489#, no-c-formatmsgid """<![CDATA[// CMT idiom\n"" Session sess = factory.getCurrentSession();\n""\n"" // do some work\n"" ...\n""]]>"msgstr ""#. Tag: para#: transactions.xml:491#, no-c-formatmsgid """In a CMT/EJB even rollback happens automatically, since an unhandled ""<literal>RuntimeException</literal> thrown by a session bean method tells ""the container to set the global transaction to rollback. <emphasis>This ""means you do not need to use the Hibernate <literal>Transaction</literal> ""API at all with BMT or CMT, and you get automatic propagation of the ""\"current\" Session bound to the transaction.</emphasis>"msgstr """Si trabajas en un entorno CMT, y usas limpieza (flushing) y cierre ""automáticos de la sesión, podrías querer también usar la misma sesión en ""diferentes partes de tu código. Típicamente, en un entorno no manejado, ""usarías una variable <literal>ThreadLocal</literal> para tener la sesión, ""pero una sola petición de EJB puede ejecutarse en diferentes hebras (por ""ejemplo, un bean de sesión llamando a otro bean de sesión). Si no quieres ""molestarte en pasar tu <literal>Session</literal> por alrededor, la ""<literal>SessionFactory</literal> provee el método <literal>getCurrentSession""()</literal>, que devuelve una sesión que está pegada al contexto de ""transacción JTA. ¡Esta es la forma más fácil de integrar Hibernate en una ""aplicación! La sesión \"actual\" siempre tiene habilitados limpieza, cierre ""y liberación de conexión automáticos (sin importar la configuración de las ""propiedades anteriores). Nuestra idioma de gestión de sesión/transacción se ""reduce a:"#. Tag: para#: transactions.xml:499#, no-c-formatmsgid """Note that you should choose <literal>org.hibernate.transaction.""JTATransactionFactory</literal> if you use JTA directly (BMT), and ""<literal>org.hibernate.transaction.CMTTransactionFactory</literal> in a CMT ""session bean, when you configure Hibernate's transaction factory. Remember ""to also set <literal>hibernate.transaction.manager_lookup_class</literal>. ""Furthermore, make sure that your <literal>hibernate.""current_session_context_class</literal> is either unset (backwards ""compatiblity), or set to <literal>\"jta\"</literal>."msgstr """En otras palabras, todo lo que tienes que hacer en un entorno manejado, es ""llamar a <literal>SessionFactory.getCurrentSession()</literal>, hacer tu ""trabajo de acceso a datos, y dejar el resto al contenedor. Los límites de ""transacción se establecen declarativamente en los descriptores de despliegue ""de tu bean de sesión. El ciclo de vida de la sesión es manejado ""completamente por Hibernate."#. Tag: para#: transactions.xml:508#, no-c-formatmsgid """The <literal>getCurrentSession()</literal> operation has one downside in a ""JTA environment. There is one caveat to the use of <literal>after_statement</""literal> connection release mode, which is then used by default. Due to a "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -