📄 transactions.po
字号:
msgid ""msgstr """Project-Id-Version: PACKAGE VERSION\n""Report-Msgid-Bugs-To: http://bugs.kde.org\n""POT-Creation-Date: 2007-10-25 07:47+0000\n""PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n""Last-Translator: FULL NAME <EMAIL@ADDRESS>\n""Language-Team: LANGUAGE <LL@li.org>\n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=UTF-8\n""Content-Transfer-Encoding: 8bit\n"#. Tag: title#: transactions.xml:5#, no-c-formatmsgid "Transactions And Concurrency"msgstr "Transações e Concorrência"#. Tag: para#: transactions.xml:7#, no-c-formatmsgid """The most important point about Hibernate and concurrency control is that it ""is very easy to understand. Hibernate directly uses JDBC connections and JTA ""resources without adding any additional locking behavior. We highly ""recommend you spend some time with the JDBC, ANSI, and transaction isolation ""specification of your database management system."msgstr """O ponto o mais importante sobre o Hibernate e o controle de concorrência é ""que é muito fácil de ser compreendido. O Hibernate usa diretamente conexões ""de JDBC e recursos de JTA sem adicionar nenhum comportamento de bloqueio a ""mais. Nós altamente recomendamos que você gaste algum tempo com o JDBC, o ""ANSI e a especificação de isolamento de transação de seu sistema de gerência ""da base de dados."#. Tag: para#: transactions.xml:14#, no-c-formatmsgid """Hibernate does not lock objects in memory. Your application can expect the ""behavior as defined by the isolation level of your database transactions. ""Note that thanks to the <literal>Session</literal>, which is also a ""transaction-scoped cache, Hibernate provides repeatable reads for lookup by ""identifier and entity queries (not reporting queries that return scalar ""values)."msgstr """O Hibernate não bloqueia objetos na memória. Sua aplicação pode esperar o ""comportamento tal qual definido pelo nível de isolamento de suas transações ""de banco de dados. Note que graças ao <literal>Session</literal>, que também ""é um cache de escopo de transação, o Hibernate fornece leituras repetíveis ""para procurar por identificadores e consultas de entidade (não pesquisas de ""relatórios que retornam valores escalares)."#. Tag: para#: transactions.xml:22#, no-c-formatmsgid """In addition to versioning for automatic optimistic concurrency control, ""Hibernate also offers a (minor) API for pessimistic locking of rows, using ""the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency ""control and this API are discussed later in this chapter."msgstr """Além do versionamento para o controle automático de concorrência otimista, o ""Hibernate oferece também uma API (menor) para bloqueio pessimista de linhas ""usando a sintaxe <literal>SELECT FOR UPDATE</literal>. O controle de ""concorrência otimista e esta API são discutidos mais tarde neste capítulo."#. Tag: para#: transactions.xml:29#, no-c-formatmsgid """We start the discussion of concurrency control in Hibernate with the ""granularity of <literal>Configuration</literal>, <literal>SessionFactory</""literal>, and <literal>Session</literal>, as well as database transactions ""and long conversations."msgstr """Nós começamos a discussão do controle de concorrência no Hibernate com a ""granularidade do <literal>Configuration</literal>, <literal>SessionFactory</""literal>, e <literal>Session</literal>, além de transações de base de dados ""e conversações longas."#. Tag: title#: transactions.xml:36#, no-c-formatmsgid "Session and transaction scopes"msgstr "Session e escopos de transações"#. Tag: para#: transactions.xml:38#, no-c-formatmsgid """A <literal>SessionFactory</literal> is an expensive-to-create, threadsafe ""object intended to be shared by all application threads. It is created once, ""usually on application startup, from a <literal>Configuration</literal> ""instance."msgstr """Um <literal>SessionFactory</literal> é objeto threadsafe compartilhado por ""todas as threads da aplicação que consome muitos recursos na sua criação. É ""criado uma unica vez no inicio da execução da aplicação a partir da ""instância de uma <literal>Configuration</literal>."#. Tag: para#: transactions.xml:44#, no-c-formatmsgid """A <literal>Session</literal> is an inexpensive, non-threadsafe object that ""should be used once, for a single request, a conversation, single unit of ""work, and then discarded. A <literal>Session</literal> will not obtain a ""JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) ""unless it is needed, hence consume no resources until used."msgstr """Uma <literal>Session</literal> é um objeto de baixo custo de criação, não é ""threadsafe, deve ser usado uma vez, para uma única requisição, uma ""conversação, uma única unidade do trabalho e então deve ser descartado. Um ""<literal>Session</literal> não obterá um JDBC <literal>Connection</literal> ""(ou um <literal>Datasource</literal>) a menos que necessite, ""conseqüentemente não consome nenhum recurso até ser usado."#. Tag: para#: transactions.xml:52#, no-c-formatmsgid """To complete this picture you also have to think about database transactions. ""A database transaction has to be as short as possible, to reduce lock ""contention in the database. Long database transactions will prevent your ""application from scaling to highly concurrent load. Hence, it is almost ""never good design to hold a database transaction open during user think ""time, until the unit of work is complete."msgstr """Para completar, você também tem que pensar sobre as transações de base de ""dados. Uma transação tem que ser tão curta quanto possível, para reduzir a ""disputa pelo bloqueio na base de dados. Transações longas impedirão que sua ""aplicação escale a carga altamente concorrente. Por isso, em um projeto ""raramente é para manter uma transação de base de dados aberta durante o ""tempo que o usuário pensa, até que a unidade do trabalho esteja completa."#. Tag: para#: transactions.xml:61#, no-c-formatmsgid """What is the scope of a unit of work? Can a single Hibernate ""<literal>Session</literal> span several database transactions or is this a ""one-to-one relationship of scopes? When should you open and close a ""<literal>Session</literal> and how do you demarcate the database transaction ""boundaries?"msgstr """Qual é o escopo de uma unidade de trabalho? Pode uma únicoa ""<literal>Session</literal> do Hibernate gerenciar diversas transações ou é ""esta um o relacionamento um-para-um dos escopos? Quando deve você abrir e ""fechar uma <literal>Session</literal> e como você demarca os limites da ""transação?"#. Tag: title#: transactions.xml:69#, no-c-formatmsgid "Unit of work"msgstr "Unidade de trabalho"#. Tag: para#: transactions.xml:71#, no-c-formatmsgid """First, don't use the <emphasis>session-per-operation</emphasis> antipattern, ""that is, don't open and close a <literal>Session</literal> for every simple ""database call in a single thread! Of course, the same is true for database ""transactions. Database calls in an application are made using a planned ""sequence, they are grouped into atomic units of work. (Note that this also ""means that auto-commit after every single SQL statement is useless in an ""application, this mode is intended for ad-hoc SQL console work. Hibernate ""disables, or expects the application server to do so, auto-commit mode ""immediately.) Database transactions are never optional, all communication ""with a database has to occur inside a transaction, no matter if you read or ""write data. As explained, auto-commit behavior for reading data should be ""avoided, as many small transactions are unlikely to perform better than one ""clearly defined unit of work. The latter is also much more maintainable and ""extensible."msgstr """Primeiro, não use o antipattern <emphasis>sessão-por-operação</emphasis>, ""isto é, não abra e não feche uma <literal>Session</literal> para cada ""simples chamada ao banco de de dados em uma única thread! Naturalmente, o ""mesmo é verdadeiro para transações. As chamadas a banco de dados em uma ""aplicação são feitas usando uma seqüência planejada, elas são agrupadas em ""unidades de trabalho atômicas. (Veja que isso também significa que um auto-""commit depois de cada sentença SQL é inútil em uma aplicação, esta ""modalidade é ideal para o trabalho ad hoc do console do SQL. O Hibernate ""impede, ou espera que o servidor de aplicação impessa isso, o uso da ""modalidade de auto-commit.) As transações nunca são opcionais, toda a ""comunicação com um banco de dados tem que ocorrer dentro de uma transação, ""não importa se você vai ler ou escrever dados. Como explicado, o ""comportamento auto-commit para leitura de dados deve ser evitado, como ""muitas transações pequenas são improváveis de executar melhor do que uma ""unidade claramente definida do trabalho. A última opção também muito mais ""manutenível e extensível."#. Tag: para#: transactions.xml:87#, no-c-formatmsgid """The most common pattern in a multi-user client/server application is ""<emphasis>session-per-request</emphasis>. In this model, a request from the ""client is send to the server (where the Hibernate persistence layer runs), a ""new Hibernate <literal>Session</literal> is opened, and all database ""operations are executed in this unit of work. Once the work has been ""completed (and the response for the client has been prepared), the session ""is flushed and closed. You would also use a single database transaction to ""serve the clients request, starting and committing it when you open and ""close the <literal>Session</literal>. The relationship between the two is ""one-to-one and this model is a perfect fit for many applications."msgstr """O pattern mais comum em uma aplicação multi-usuário cliente/servidor é ""<emphasis>sessão-por-requisição</emphasis>. Neste modelo, uma requisição do ""cliente é enviada ao servidor (onde a camada de persistência do Hibernate ""roda), uma <literal>Session</literal> nova do Hibernate é aberta, e todas as ""operações da base de dados são executadas nesta unidade do trabalho. Logo ""que o trabalho for completado (e a resposta para o cliente for preparada), a ""sessão é descarregad e fechada. Você usaria também uma única transação de ""base de dados para servir às requisições dos clientes, começando e ""commitando-o quando você abre e fecha a <literal>Session</literal>. O ""relacionamento entre os dois é um-para-um e este modelo é um ajuste perfeito ""para muitas aplicações."#. Tag: para#: transactions.xml:99#, no-c-formatmsgid """The challenge lies in the implementation. Hibernate provides built-in ""management of the \"current session\" to simplify this pattern. All you have ""to do is start a transaction when a server request has to be processed, and ""end the transaction before the response is send to the client. You can do ""this in any way you like, common solutions are <literal>ServletFilter</""literal>, AOP interceptor with a pointcut on the service methods, or a proxy/""interception container. An EJB container is a standardized way to implement ""cross-cutting aspects such as transaction demarcation on EJB session beans, ""declaratively with CMT. If you decide to use programmatic transaction ""demarcation, prefer the Hibernate <literal>Transaction</literal> API shown ""later in this chapter, for ease of use and code portability."msgstr """O desafio encontra-se na implementação. O Hibernate fornece gerência ""integrada da \"sessão atual\" para simplificar este pattern. Tudo que você ""tem que fazer é iniciar uma transação quando uma requisição tem que ser ""processada e termina a transação antes que a resposta seja enviada ao ""cliente. Você pode fazer onde quiser, soluções comuns são ""<literal>ServletFilter</literal>, interceptador AOP com um pointcut (ponto ""de corte) nos métodos de serviço ou em um container de proxy/interceptação. ""Um container de EJB é uma maneira padronizada para implementar aspectos ""cross-cutting tais como a demarcação da transação em EJB session beans, ""declarativamente com CMT. Se você se decidir usar demarcação programática de ""transação, de preferencia a API <literal>Transaction</literal> do Hibernate ""mostrada mais adiante neste capítulo, para fácilidade no uso e portabilidade ""de código."#. Tag: para#: transactions.xml:112#, no-c-formatmsgid """Your application code can access a \"current session\" to process the ""request by simply calling <literal>sessionFactory.getCurrentSession()</""literal> anywhere and as often as needed. You will always get a ""<literal>Session</literal> scoped to the current database transaction. This ""has to be configured for either resource-local or JTA environments, see ""<xref linkend=\"architecture-current-session\"/>."msgstr """Seu código de aplicação pode acessar a \"sessão atual\" para processar a ""requisição fazendo uma chamada simples a <literal>sessionFactory.""getCurrentSession()</literal> em qualquer lugar e com a frequencia ""necessária. Você sempre conseguirá uma <literal>Session</literal> limitada a ""transação atual. Isto tem que ser configurado para recurso local ou os ""ambientes JTA. Veja <xref linkend=\"architecture-current-session\"/>."#. Tag: para#: transactions.xml:120#, no-c-formatmsgid """Sometimes it is convenient to extend the scope of a <literal>Session</""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 "
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -