~raginggoblin/infolog/infolog

« back to all changes in this revision

Viewing changes to InfologServer/lib/hibernate-distribution-3.3.2.GA/project/documentation/manual/src/main/docbook/pt-BR/content/transactions.po

  • Committer: Raging Goblin
  • Date: 2013-11-16 16:51:32 UTC
  • Revision ID: raging_goblin-20131116165132-weujnptzc88uy4ah
Mavenized the project, now using shared project InfologSync

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
msgid ""
2
 
msgstr ""
3
 
"Project-Id-Version: PACKAGE VERSION\n"
4
 
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
5
 
"POT-Creation-Date: 2009-06-10 21:02+0000\n"
6
 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
7
 
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
 
"Language-Team: LANGUAGE <LL@li.org>\n"
9
 
"MIME-Version: 1.0\n"
10
 
"Content-Type: text/plain; charset=UTF-8\n"
11
 
"Content-Transfer-Encoding: 8bit\n"
12
 
 
13
 
#. Tag: title
14
 
#: transactions.xml:29
15
 
#, fuzzy, no-c-format
16
 
msgid "Transactions and Concurrency"
17
 
msgstr "Transações e Concorrência"
18
 
 
19
 
#. Tag: para
20
 
#: transactions.xml:31
21
 
#, fuzzy, no-c-format
22
 
msgid ""
23
 
"The most important point about Hibernate and concurrency control is that it "
24
 
"is easy to understand. Hibernate directly uses JDBC connections and JTA "
25
 
"resources without adding any additional locking behavior. It is recommended "
26
 
"that you spend some time with the JDBC, ANSI, and transaction isolation "
27
 
"specification of your database management system."
28
 
msgstr ""
29
 
"O ponto o mais importante sobre o Hibernate e o controle de concorrência é "
30
 
"que é muito fácil de ser compreendido. O Hibernate usa diretamente conexões "
31
 
"de JDBC e recursos de JTA sem adicionar nenhum comportamento de bloqueio a "
32
 
"mais. Nós altamente recomendamos que você gaste algum tempo com o JDBC, o "
33
 
"ANSI e a especificação de isolamento de transação de seu sistema de gerência "
34
 
"da base de dados."
35
 
 
36
 
#. Tag: para
37
 
#: transactions.xml:38
38
 
#, fuzzy, no-c-format
39
 
msgid ""
40
 
"Hibernate does not lock objects in memory. Your application can expect the "
41
 
"behavior as defined by the isolation level of your database transactions. "
42
 
"Through <literal>Session</literal>, which is also a transaction-scoped "
43
 
"cache, Hibernate provides repeatable reads for lookup by identifier and "
44
 
"entity queries and not reporting queries that return scalar values."
45
 
msgstr ""
46
 
"O Hibernate não bloqueia objetos na memória. Sua aplicação pode esperar o "
47
 
"comportamento tal qual definido pelo nível de isolamento de suas transações "
48
 
"de banco de dados. Note que graças ao <literal>Session</literal>, que também "
49
 
"é um cache de escopo de transação, o Hibernate fornece leituras repetíveis "
50
 
"para procurar por identificadores e consultas de entidade (não pesquisas de "
51
 
"relatórios que retornam valores escalares)."
52
 
 
53
 
#. Tag: para
54
 
#: transactions.xml:46
55
 
#, fuzzy, no-c-format
56
 
msgid ""
57
 
"In addition to versioning for automatic optimistic concurrency control, "
58
 
"Hibernate also offers, using the <literal>SELECT FOR UPDATE</literal> "
59
 
"syntax, a (minor) API for pessimistic locking of rows. Optimistic "
60
 
"concurrency control and this API are discussed later in this chapter."
61
 
msgstr ""
62
 
"Além do versionamento para o controle automático de concorrência otimista, o "
63
 
"Hibernate oferece também uma API (menor) para bloqueio pessimista de linhas "
64
 
"usando a sintaxe <literal>SELECT FOR UPDATE</literal>. O controle de "
65
 
"concorrência otimista e esta API são discutidos mais tarde neste capítulo."
66
 
 
67
 
#. Tag: para
68
 
#: transactions.xml:53
69
 
#, fuzzy, no-c-format
70
 
msgid ""
71
 
"The discussion of concurrency control in Hibernate begins with the "
72
 
"granularity of <literal>Configuration</literal>, <literal>SessionFactory</"
73
 
"literal>, and <literal>Session</literal>, as well as database transactions "
74
 
"and long conversations."
75
 
msgstr ""
76
 
"Nós começamos a discussão do controle de concorrência no Hibernate com a "
77
 
"granularidade do <literal>Configuration</literal>, <literal>SessionFactory</"
78
 
"literal>, e <literal>Session</literal>, além de transações de base de dados "
79
 
"e conversações longas."
80
 
 
81
 
#. Tag: title
82
 
#: transactions.xml:60
83
 
#, no-c-format
84
 
msgid "Session and transaction scopes"
85
 
msgstr "Session e escopos de transações"
86
 
 
87
 
#. Tag: para
88
 
#: transactions.xml:62
89
 
#, fuzzy, no-c-format
90
 
msgid ""
91
 
"A <literal>SessionFactory</literal> is an expensive-to-create, threadsafe "
92
 
"object, intended to be shared by all application threads. It is created "
93
 
"once, usually on application startup, from a <literal>Configuration</"
94
 
"literal> instance."
95
 
msgstr ""
96
 
"Um <literal>SessionFactory</literal> é objeto threadsafe compartilhado por "
97
 
"todas as threads da aplicação que consome muitos recursos na sua criação. É "
98
 
"criado uma unica vez no inicio da execução da aplicação a partir da "
99
 
"instância de uma <literal>Configuration</literal>."
100
 
 
101
 
#. Tag: para
102
 
#: transactions.xml:68
103
 
#, fuzzy, no-c-format
104
 
msgid ""
105
 
"A <literal>Session</literal> is an inexpensive, non-threadsafe object that "
106
 
"should be used once and then discarded for: a single request, a conversation "
107
 
"or a single unit of work. A <literal>Session</literal> will not obtain a "
108
 
"JDBC <literal>Connection</literal>, or a <literal>Datasource</literal>, "
109
 
"unless it is needed. It will not consume any resources until used."
110
 
msgstr ""
111
 
"Uma <literal>Session</literal> é um objeto de baixo custo de criação, não é "
112
 
"threadsafe, deve ser usado uma vez, para uma única requisição, uma "
113
 
"conversação, uma única unidade do trabalho e então deve ser descartado. Um "
114
 
"<literal>Session</literal> não obterá um JDBC <literal>Connection</literal> "
115
 
"(ou um <literal>Datasource</literal>) a menos que necessite, "
116
 
"conseqüentemente não consome nenhum recurso até ser usado."
117
 
 
118
 
#. Tag: para
119
 
#: transactions.xml:76
120
 
#, fuzzy, no-c-format
121
 
msgid ""
122
 
"In order to reduce lock contention in the database, a database transaction "
123
 
"has to be as short as possible. Long database transactions will prevent your "
124
 
"application from scaling to a highly concurrent load. It is not recommended "
125
 
"that you hold a database transaction open during user think time until the "
126
 
"unit of work is complete."
127
 
msgstr ""
128
 
"Para completar, você também tem que pensar sobre as transações de base de "
129
 
"dados. Uma transação tem que ser tão curta quanto possível, para reduzir a "
130
 
"disputa pelo bloqueio na base de dados. Transações longas impedirão que sua "
131
 
"aplicação escale a carga altamente concorrente. Por isso, em um projeto "
132
 
"raramente é para manter uma transação de base de dados aberta durante o "
133
 
"tempo que o usuário pensa, até que a unidade do trabalho esteja completa."
134
 
 
135
 
#. Tag: para
136
 
#: transactions.xml:84
137
 
#, fuzzy, no-c-format
138
 
msgid ""
139
 
"What is the scope of a unit of work? Can a single Hibernate "
140
 
"<literal>Session</literal> span several database transactions, or is this a "
141
 
"one-to-one relationship of scopes? When should you open and close a "
142
 
"<literal>Session</literal> and how do you demarcate the database transaction "
143
 
"boundaries? These questions are addressed in the following sections."
144
 
msgstr ""
145
 
"Qual é o escopo de uma unidade de trabalho? Pode uma únicoa "
146
 
"<literal>Session</literal> do Hibernate gerenciar diversas transações ou é "
147
 
"esta um o relacionamento um-para-um dos escopos? Quando deve você abrir e "
148
 
"fechar uma <literal>Session</literal> e como você demarca os limites da "
149
 
"transação?"
150
 
 
151
 
#. Tag: title
152
 
#: transactions.xml:92
153
 
#, no-c-format
154
 
msgid "Unit of work"
155
 
msgstr "Unidade de trabalho"
156
 
 
157
 
#. Tag: para
158
 
#: transactions.xml:94
159
 
#, no-c-format
160
 
msgid ""
161
 
"First, let's define a unit of work. A unit of work is a design pattern "
162
 
"described by Martin Fowler as <quote> [maintaining] a list of objects "
163
 
"affected by a business transaction and coordinates the writing out of "
164
 
"changes and the resolution of concurrency problems. </quote><citation>PoEAA</"
165
 
"citation> In other words, its a series of operations we wish to carry out "
166
 
"against the database together. Basically, it is a transaction, though "
167
 
"fulfilling a unit of work will often span multiple physical database "
168
 
"transactions (see <xref linkend=\"transactions-basics-apptx\"/>). So really "
169
 
"we are talking about a more abstract notion of a transaction. The term "
170
 
"\"business transaction\" is also sometimes used in lieu of unit of work."
171
 
msgstr ""
172
 
 
173
 
#. Tag: para
174
 
#: transactions.xml:111
175
 
#, fuzzy, no-c-format
176
 
msgid ""
177
 
"Do not use the <emphasis>session-per-operation</emphasis> antipattern: do "
178
 
"not open and close a <literal>Session</literal> for every simple database "
179
 
"call in a single thread. The same is true for database transactions. "
180
 
"Database calls in an application are made using a planned sequence; they are "
181
 
"grouped into atomic units of work. This also means that auto-commit after "
182
 
"every single SQL statement is useless in an application as this mode is "
183
 
"intended for ad-hoc SQL console work. Hibernate disables, or expects the "
184
 
"application server to disable, auto-commit mode immediately. Database "
185
 
"transactions are never optional. All communication with a database has to "
186
 
"occur inside a transaction. Auto-commit behavior for reading data should be "
187
 
"avoided, as many small transactions are unlikely to perform better than one "
188
 
"clearly defined unit of work. The latter is also more maintainable and "
189
 
"extensible."
190
 
msgstr ""
191
 
"Primeiro, não use o antipattern <emphasis>sessão-por-operação</emphasis>, "
192
 
"isto é, não abra e não feche uma <literal>Session</literal> para cada "
193
 
"simples chamada ao banco de de dados em uma única thread! Naturalmente, o "
194
 
"mesmo é verdadeiro para transações. As chamadas a banco de dados em uma "
195
 
"aplicação são feitas usando uma seqüência planejada, elas são agrupadas em "
196
 
"unidades de trabalho atômicas. (Veja que isso também significa que um auto-"
197
 
"commit depois de cada sentença SQL é inútil em uma aplicação, esta "
198
 
"modalidade é ideal para o trabalho ad hoc do console do SQL. O Hibernate "
199
 
"impede, ou espera que o servidor de aplicação impessa isso, o uso da "
200
 
"modalidade de auto-commit.) As transações nunca são opcionais, toda a "
201
 
"comunicação com um banco de dados tem que ocorrer dentro de uma transação, "
202
 
"não importa se você vai ler ou escrever dados. Como explicado, o "
203
 
"comportamento auto-commit para leitura de dados deve ser evitado, como "
204
 
"muitas transações pequenas são improváveis de executar melhor do que uma "
205
 
"unidade claramente definida do trabalho. A última opção também muito mais "
206
 
"manutenível e extensível."
207
 
 
208
 
#. Tag: para
209
 
#: transactions.xml:126
210
 
#, fuzzy, no-c-format
211
 
msgid ""
212
 
"The most common pattern in a multi-user client/server application is "
213
 
"<emphasis>session-per-request</emphasis>. In this model, a request from the "
214
 
"client is sent to the server, where the Hibernate persistence layer runs. A "
215
 
"new Hibernate <literal>Session</literal> is opened, and all database "
216
 
"operations are executed in this unit of work. On completion of the work, and "
217
 
"once the response for the client has been prepared, the session is flushed "
218
 
"and closed. Use a single database transaction to serve the clients request, "
219
 
"starting and committing it when you open and close the <literal>Session</"
220
 
"literal>. The relationship between the two is one-to-one and this model is a "
221
 
"perfect fit for many applications."
222
 
msgstr ""
223
 
"O pattern mais comum em uma aplicação multi-usuário cliente/servidor é "
224
 
"<emphasis>sessão-por-requisição</emphasis>. Neste modelo, uma requisição do "
225
 
"cliente é enviada ao servidor (onde a camada de persistência do Hibernate "
226
 
"roda), uma <literal>Session</literal> nova do Hibernate é aberta, e todas as "
227
 
"operações da base de dados são executadas nesta unidade do trabalho. Logo "
228
 
"que o trabalho for completado (e a resposta para o cliente for preparada), a "
229
 
"sessão é descarregad e fechada. Você usaria também uma única transação de "
230
 
"base de dados para servir às requisições dos clientes, começando e "
231
 
"commitando-o quando você abre e fecha a <literal>Session</literal>. O "
232
 
"relacionamento entre os dois é um-para-um e este modelo é um ajuste perfeito "
233
 
"para muitas aplicações."
234
 
 
235
 
#. Tag: para
236
 
#: transactions.xml:138
237
 
#, fuzzy, no-c-format
238
 
msgid ""
239
 
"The challenge lies in the implementation. Hibernate provides built-in "
240
 
"management of the \"current session\" to simplify this pattern. Start a "
241
 
"transaction when a server request has to be processed, and end the "
242
 
"transaction before the response is sent to the client. Common solutions are "
243
 
"<literal>ServletFilter</literal>, AOP interceptor with a pointcut on the "
244
 
"service methods, or a proxy/interception container. An EJB container is a "
245
 
"standardized way to implement cross-cutting aspects such as transaction "
246
 
"demarcation on EJB session beans, declaratively with CMT. If you use "
247
 
"programmatic transaction demarcation, for ease of use and code portability "
248
 
"use the Hibernate <literal>Transaction</literal> API shown later in this "
249
 
"chapter."
250
 
msgstr ""
251
 
"O desafio encontra-se na implementação. O Hibernate fornece gerência "
252
 
"integrada da \"sessão atual\" para simplificar este pattern. Tudo que você "
253
 
"tem que fazer é iniciar uma transação quando uma requisição tem que ser "
254
 
"processada e termina a transação antes que a resposta seja enviada ao "
255
 
"cliente. Você pode fazer onde quiser, soluções comuns são "
256
 
"<literal>ServletFilter</literal>, interceptador AOP com um pointcut (ponto "
257
 
"de corte) nos métodos de serviço ou em um container de proxy/interceptação. "
258
 
"Um container de EJB é uma maneira padronizada para implementar aspectos "
259
 
"cross-cutting tais como a demarcação da transação em EJB session beans, "
260
 
"declarativamente com CMT. Se você se decidir usar demarcação programática de "
261
 
"transação, de preferencia a API <literal>Transaction</literal> do Hibernate "
262
 
"mostrada mais adiante neste capítulo, para fácilidade no uso e portabilidade "
263
 
"de código."
264
 
 
265
 
#. Tag: para
266
 
#: transactions.xml:150
267
 
#, fuzzy, no-c-format
268
 
msgid ""
269
 
"Your application code can access a \"current session\" to process the "
270
 
"request by calling <literal>sessionFactory.getCurrentSession()</literal>. "
271
 
"You will always get a <literal>Session</literal> scoped to the current "
272
 
"database transaction. This has to be configured for either resource-local or "
273
 
"JTA environments, see <xref linkend=\"architecture-current-session\"/>."
274
 
msgstr ""
275
 
"Seu código de aplicação pode acessar a \"sessão atual\" para processar a "
276
 
"requisição fazendo uma chamada simples a <literal>sessionFactory."
277
 
"getCurrentSession()</literal> em qualquer lugar e com a frequencia "
278
 
"necessária. Você sempre conseguirá uma <literal>Session</literal> limitada a "
279
 
"transação atual. Isto tem que ser configurado para recurso local ou os "
280
 
"ambientes JTA. Veja <xref linkend=\"architecture-current-session\"/>."
281
 
 
282
 
#. Tag: para
283
 
#: transactions.xml:158
284
 
#, fuzzy, no-c-format
285
 
msgid ""
286
 
"You can extend the scope of a <literal>Session</literal> and database "
287
 
"transaction until the \"view has been rendered\". This is especially useful "
288
 
"in servlet applications that utilize a separate rendering phase after the "
289
 
"request has been processed. Extending the database transaction until view "
290
 
"rendering, is achieved by implementing your own interceptor. However, this "
291
 
"will be difficult if you rely on EJBs with container-managed transactions. A "
292
 
"transaction will be completed when an EJB method returns, before rendering "
293
 
"of any view can start. See the Hibernate website and forum for tips and "
294
 
"examples relating to this <emphasis>Open Session in View</emphasis> pattern."
295
 
msgstr ""
296
 
"Às vezes é conveniente estender o escopo de uma <literal>Session</literal> e "
297
 
"de uma transação do banco de dados até que a \"visão esteja renderizada\". É "
298
 
"especialmente útil em aplicações servlet que utilizam uma fase de "
299
 
"rendenderização separada depois que a requisição ter sido processada. "
300
 
"Estendendo a transação até que renderização da visão esteja completa é fácil "
301
 
"de fazer se você implementar seu próprio interceptador. Entretanto, não se "
302
 
"pode fazer facilmente se você confiar em EJBs com transações gerenciadas por "
303
 
"contêiner, porque uma transação será terminada quando um método de EJB "
304
 
"retornar, antes da renderização de toda visão puder começar. Veja o website "
305
 
"e o fórum do Hibernate para dicas e exemplos em torno deste pattern "
306
 
"<emphasis>Open Session in View</emphasis>."
307
 
 
308
 
#. Tag: title
309
 
#: transactions.xml:173
310
 
#, no-c-format
311
 
msgid "Long conversations"
312
 
msgstr "Longas conversações"
313
 
 
314
 
#. Tag: para
315
 
#: transactions.xml:175
316
 
#, fuzzy, no-c-format
317
 
msgid ""
318
 
"The session-per-request pattern is not the only way of designing units of "
319
 
"work. Many business processes require a whole series of interactions with "
320
 
"the user that are interleaved with database accesses. In web and enterprise "
321
 
"applications, it is not acceptable for a database transaction to span a user "
322
 
"interaction. Consider the following example:"
323
 
msgstr ""
324
 
"O pattern sessão-por-requisição não é o único conceito útil que você pode "
325
 
"usar ao projetar unidades de trabalho. Muitos processos de negócio requerem "
326
 
"uma totalidade de séries de interações com o usuário intercaladas com "
327
 
"acessos a uma base de dados. Em aplicações web e corporativas não é "
328
 
"aceitável para uma transação atrapalhe uma interação do usuário. Considere o "
329
 
"seguinte exemplo:"
330
 
 
331
 
#. Tag: para
332
 
#: transactions.xml:185
333
 
#, fuzzy, no-c-format
334
 
msgid ""
335
 
"The first screen of a dialog opens. The data seen by the user has been "
336
 
"loaded in a particular <literal>Session</literal> and database transaction. "
337
 
"The user is free to modify the objects."
338
 
msgstr ""
339
 
"A primeira tela de um diálogo abre os dados carregado pelo usuário em "
340
 
"através de <literal>Session</literal> e transação particulares. O usuário "
341
 
"está livre modificar os objetos."
342
 
 
343
 
#. Tag: para
344
 
#: transactions.xml:192
345
 
#, fuzzy, no-c-format
346
 
msgid ""
347
 
"The user clicks \"Save\" after 5 minutes and expects their modifications to "
348
 
"be made persistent. The user also expects that they were the only person "
349
 
"editing this information and that no conflicting modification has occurred."
350
 
msgstr ""
351
 
"O usuário clica em \"Salvar\" após 5 minutos e espera suas modificações "
352
 
"serem persistidas; espera também que ele era a única pessoa que edita esta "
353
 
"informação e que nenhuma modificação conflitante possa ocorrer."
354
 
 
355
 
#. Tag: para
356
 
#: transactions.xml:200
357
 
#, fuzzy, no-c-format
358
 
msgid ""
359
 
"From the point of view of the user, we call this unit of work a long-running "
360
 
"<emphasis>conversation</emphasis> or <emphasis>application transaction</"
361
 
"emphasis>. There are many ways to implement this in your application."
362
 
msgstr ""
363
 
"Nós chamamos esta unidade de trabalho, do ponto da visão do usuário, "
364
 
"executando uma longa <emphasis>conversação</emphasis> (ou "
365
 
"<emphasis>transação da aplicação</emphasis>). Há muitas maneiras de você "
366
 
"pode implementar em sua aplicação."
367
 
 
368
 
#. Tag: para
369
 
#: transactions.xml:206
370
 
#, fuzzy, no-c-format
371
 
msgid ""
372
 
"A first naive implementation might keep the <literal>Session</literal> and "
373
 
"database transaction open during user think time, with locks held in the "
374
 
"database to prevent concurrent modification and to guarantee isolation and "
375
 
"atomicity. This is an anti-pattern, since lock contention would not allow "
376
 
"the application to scale with the number of concurrent users."
377
 
msgstr ""
378
 
"Uma primeira implementação simples pode manter a<literal>Session</literal> e "
379
 
"a transação aberta durante o tempo de interação do usuário, com bloqueios na "
380
 
"base de dados para impedir a modificação concorrente e para garantir o "
381
 
"isolamento e a atomicidade. Esse é naturalmente um anti-pattern, desde que a "
382
 
"disputa do bloqueio não permitiria o escalonameneto da aplicação com o "
383
 
"número de usuários concorrentes."
384
 
 
385
 
#. Tag: para
386
 
#: transactions.xml:214
387
 
#, fuzzy, no-c-format
388
 
msgid ""
389
 
"You have to use several database transactions to implement the conversation. "
390
 
"In this case, maintaining isolation of business processes becomes the "
391
 
"partial responsibility of the application tier. A single conversation "
392
 
"usually spans several database transactions. It will be atomic if only one "
393
 
"of these database transactions (the last one) stores the updated data. All "
394
 
"others simply read data (for example, in a wizard-style dialog spanning "
395
 
"several request/response cycles). This is easier to implement than it might "
396
 
"sound, especially if you utilize some of Hibernate's features:"
397
 
msgstr ""
398
 
"Claramente, nós temos que usar diversas transações para implementar a "
399
 
"conversação. Neste caso, Manter o isolamento dos processos de negócio torna-"
400
 
"se responsabilidade parcial da camada da aplicação. Uma única conversação "
401
 
"geralmente usa diversas transações. Ela será atômica se somente uma destas "
402
 
"transações (a última) armazenar os dados atualizados, todas as outras "
403
 
"simplesmente leram os dados (por exemplo em um diálogo do estilo wizard que "
404
 
"mede diversos ciclos de requisição/resposta). Isto é mais fácil de "
405
 
"implementar do que pode parecer, especialmente se você usar as "
406
 
"características do Hibernate:"
407
 
 
408
 
#. Tag: para
409
 
#: transactions.xml:227
410
 
#, fuzzy, no-c-format
411
 
msgid ""
412
 
"<emphasis>Automatic Versioning</emphasis>: Hibernate can perform automatic "
413
 
"optimistic concurrency control for you. It can automatically detect if a "
414
 
"concurrent modification occurred during user think time. Check for this at "
415
 
"the end of the conversation."
416
 
msgstr ""
417
 
"<emphasis>Versionamento automático</emphasis> - O Hibernate pode fazer o "
418
 
"controle automático de concorrência otimista para você, ele pode "
419
 
"automaticamente detectar se uma modificação concorrente ocorreu durante o "
420
 
"tempo de interação do usuário. Geralmente nós verificamos somente no fim da "
421
 
"conversação."
422
 
 
423
 
#. Tag: para
424
 
#: transactions.xml:235
425
 
#, fuzzy, no-c-format
426
 
msgid ""
427
 
"<emphasis>Detached Objects</emphasis>: if you decide to use the "
428
 
"<emphasis>session-per-request</emphasis> pattern, all loaded instances will "
429
 
"be in the detached state during user think time. Hibernate allows you to "
430
 
"reattach the objects and persist the modifications. The pattern is called "
431
 
"<emphasis>session-per-request-with-detached-objects</emphasis>. Automatic "
432
 
"versioning is used to isolate concurrent modifications."
433
 
msgstr ""
434
 
"<emphasis>Detached Objects</emphasis>- se você se decidir usar o já "
435
 
"discutido pattern <emphasis>session-per-request</emphasis>, todas as "
436
 
"instâncias carregadas estarão no estado destacado durante o tempo em que o "
437
 
"usuário estiver pensando. O Hibernate permite que você reatache os objetos e "
438
 
"persita as modificações, esse pattern é chamado <emphasis>session-per-"
439
 
"request-with-detached-objects</emphasis>. É usado versionamento automatico "
440
 
"para isolar as modificações concorrentes."
441
 
 
442
 
#. Tag: para
443
 
#: transactions.xml:245
444
 
#, fuzzy, no-c-format
445
 
msgid ""
446
 
"<emphasis>Extended (or Long) Session</emphasis>: the Hibernate "
447
 
"<literal>Session</literal> can be disconnected from the underlying JDBC "
448
 
"connection after the database transaction has been committed and reconnected "
449
 
"when a new client request occurs. This pattern is known as <emphasis>session-"
450
 
"per-conversation</emphasis> and makes even reattachment unnecessary. "
451
 
"Automatic versioning is used to isolate concurrent modifications and the "
452
 
"<literal>Session</literal> will not be allowed to be flushed automatically, "
453
 
"but explicitly."
454
 
msgstr ""
455
 
"<emphasis>Extended (or Long) Session</emphasis> A <literal>Session</literal> "
456
 
"do Hibernate pode ser desligada da conexão básica do JDBC depois que a "
457
 
"transação foi commitada e ser reconectado quando uma nova requisição do "
458
 
"cliente ocorrer. Este pattern é conhecido como <emphasis>session-per-"
459
 
"conversation</emphasis> e faz o reatamento uniforme desnecessário. "
460
 
"Versionamento automático é usado para isolar modificações concorrentes e a "
461
 
"<emphasis>session-per-conversation</emphasis> usualmente não é permitido "
462
 
"para ser nivelado automaticamente, e sim explicitamente."
463
 
 
464
 
#. Tag: para
465
 
#: transactions.xml:258
466
 
#, fuzzy, no-c-format
467
 
msgid ""
468
 
"Both <emphasis>session-per-request-with-detached-objects</emphasis> and "
469
 
"<emphasis>session-per-conversation</emphasis> have advantages and "
470
 
"disadvantages. These disadvantages are discussed later in this chapter in "
471
 
"the context of optimistic concurrency control."
472
 
msgstr ""
473
 
"Ambos <emphasis>session-per-request-with-detached-objects</emphasis> e "
474
 
"<emphasis>session-per-conversation</emphasis> possuem vantagens e "
475
 
"desvantagens, nos discutiremos mais tarde neste capítulo no contexto do "
476
 
"controle de concorrência otimista."
477
 
 
478
 
#. Tag: title
479
 
#: transactions.xml:267
480
 
#, no-c-format
481
 
msgid "Considering object identity"
482
 
msgstr "Considerando a identidade do objeto"
483
 
 
484
 
#. Tag: para
485
 
#: transactions.xml:269
486
 
#, fuzzy, no-c-format
487
 
msgid ""
488
 
"An application can concurrently access the same persistent state in two "
489
 
"different <literal>Session</literal>s. However, an instance of a persistent "
490
 
"class is never shared between two <literal>Session</literal> instances. It "
491
 
"is for this reason that there are two different notions of identity:"
492
 
msgstr ""
493
 
"Uma aplicação pode acessar concorrentemente o mesmo estado persistente em "
494
 
"duas <literal>Session</literal>s diferentes. Entretanto, uma instância de "
495
 
"uma classe persistente nunca é compartilhada entre duas instâncias "
496
 
"<literal>Session</literal>. Por tanto, há duas noções diferentes da "
497
 
"identidade:"
498
 
 
499
 
#. Tag: term
500
 
#: transactions.xml:278
501
 
#, no-c-format
502
 
msgid "Database Identity"
503
 
msgstr "Identidade da base de dados"
504
 
 
505
 
#. Tag: literal
506
 
#: transactions.xml:281
507
 
#, no-c-format
508
 
msgid "foo.getId().equals( bar.getId() )"
509
 
msgstr "foo.getId().equals( bar.getId() )"
510
 
 
511
 
#. Tag: term
512
 
#: transactions.xml:286
513
 
#, no-c-format
514
 
msgid "JVM Identity"
515
 
msgstr "Identidade da JVM"
516
 
 
517
 
#. Tag: literal
518
 
#: transactions.xml:289
519
 
#, no-c-format
520
 
msgid "foo==bar"
521
 
msgstr "foo==bar"
522
 
 
523
 
#. Tag: para
524
 
#: transactions.xml:295
525
 
#, fuzzy, no-c-format
526
 
msgid ""
527
 
"For objects attached to a <emphasis>particular</emphasis> <literal>Session</"
528
 
"literal> (i.e., in the scope of a <literal>Session</literal>), the two "
529
 
"notions are equivalent and JVM identity for database identity is guaranteed "
530
 
"by Hibernate. While the application might concurrently access the \"same"
531
 
"\" (persistent identity) business object in two different sessions, the two "
532
 
"instances will actually be \"different\" (JVM identity). Conflicts are "
533
 
"resolved using an optimistic approach and automatic versioning at flush/"
534
 
"commit time."
535
 
msgstr ""
536
 
"Então para os objetos acoplados a um <literal>Session</literal> em "
537
 
"<literal>particular </literal> (isto é no escopo de um <literal>Session</"
538
 
"literal>), as duas noções são equivalentes e a identidade da JVM para a "
539
 
"identidade da base de dados é garantida pelo Hibernate. Entretanto, quando a "
540
 
"aplicação pode acessar concorrentemente o \"mesmo\" objeto do negócio "
541
 
"(identidade persistente) em duas sessões diferentes, as duas instâncias "
542
 
"serão realmente \"diferentes\" (identidade de JVM). Os conflitos são "
543
 
"resolvidos usando (versionamento automático) no flush/commit, usando "
544
 
"abordagem otimista."
545
 
 
546
 
#. Tag: para
547
 
#: transactions.xml:304
548
 
#, fuzzy, no-c-format
549
 
msgid ""
550
 
"This approach leaves Hibernate and the database to worry about concurrency. "
551
 
"It also provides the best scalability, since guaranteeing identity in single-"
552
 
"threaded units of work means that it does not need expensive locking or "
553
 
"other means of synchronization. The application does not need to synchronize "
554
 
"on any business object, as long as it maintains a single thread per "
555
 
"<literal>Session</literal>. Within a <literal>Session</literal> the "
556
 
"application can safely use <literal>==</literal> to compare objects."
557
 
msgstr ""
558
 
"Este caminho deixa o Hibernate e o banco dedados se preocuparem com a "
559
 
"concorrência; também fornece uma escalabilidade melhor, garantindo que a "
560
 
"identidade em unidades de trabalho único-encadeadas não necessite de "
561
 
"bloqueio dispendioso ou de outros meios de sincronização. A aplicação nunca "
562
 
"necessita sincronizar qualquer objeto de negócio tão longo que transpasse "
563
 
"uma única thread por <literal>Session</literal>. Dentro de uma "
564
 
"<literal>Session</literal> a aplicação pode usar com segurança o "
565
 
"<literal>==</literal> para comparar objetos."
566
 
 
567
 
#. Tag: para
568
 
#: transactions.xml:313
569
 
#, fuzzy, no-c-format
570
 
msgid ""
571
 
"However, an application that uses <literal>==</literal> outside of a "
572
 
"<literal>Session</literal> might produce unexpected results. This might "
573
 
"occur even in some unexpected places. For example, if you put two detached "
574
 
"instances into the same <literal>Set</literal>, both might have the same "
575
 
"database identity (i.e., they represent the same row). JVM identity, "
576
 
"however, is by definition not guaranteed for instances in a detached state. "
577
 
"The developer has to override the <literal>equals()</literal> and "
578
 
"<literal>hashCode()</literal> methods in persistent classes and implement "
579
 
"their own notion of object equality. There is one caveat: never use the "
580
 
"database identifier to implement equality. Use a business key that is a "
581
 
"combination of unique, usually immutable, attributes. The database "
582
 
"identifier will change if a transient object is made persistent. If the "
583
 
"transient instance (usually together with detached instances) is held in a "
584
 
"<literal>Set</literal>, changing the hashcode breaks the contract of the "
585
 
"<literal>Set</literal>. Attributes for business keys do not have to be as "
586
 
"stable as database primary keys; you only have to guarantee stability as "
587
 
"long as the objects are in the same <literal>Set</literal>. See the "
588
 
"Hibernate website for a more thorough discussion of this issue. Please note "
589
 
"that this is not a Hibernate issue, but simply how Java object identity and "
590
 
"equality has to be implemented."
591
 
msgstr ""
592
 
"Com tudo, uma aplicação que usa <literal>==</literal> fora de uma "
593
 
"<literal>Session</literal>, pode ver resultados inesperados. Isto pode "
594
 
"ocorrer mesmo em alguns lugares inesperados, por exemplo, se você colocar "
595
 
"duas instâncias desacopladas em um mesmo <literal>Set</literal>. Ambos podem "
596
 
"ter a mesma identidade na base de dados (isto é eles representam a mesma "
597
 
"linha em uma tabela), mas a identidade da JVM pela definição não garantida "
598
 
"para instâncias em estado desacoplado. O desenvolvedor tem que sobrescrever "
599
 
"os métodos <literal>equals()</literal> e <literal>hashCode()</literal> em "
600
 
"classes persistentes e implementar sua própria noção da igualdade do objeto. "
601
 
"Advertência: nunca use o identificador da base de dados para implementar a "
602
 
"igualdade, use atributos de negócio, uma combinação única, geralmente "
603
 
"imutável. O identificador da base de dados mudará se um objeto transiente "
604
 
"passar para o estado persistente. Se a instância transiente (geralmente "
605
 
"junto com instâncias desacopladas) for inserida em um <literal>Set</"
606
 
"literal>, mudar o hashcode quebra o contrato do <literal>Set</literal>. "
607
 
"Atributos para chaves de negócio não têm que ser tão estável quanto às "
608
 
"chaves primárias da base de dados, você somente tem que garantir a "
609
 
"estabilidade durante o tempo que os objetos estiverem no mesmo Set. Veja o "
610
 
"website do Hibernate para uma discussão mais completa sobre o assunto. Note "
611
 
"também que esta não é uma caracteristica do Hibernate, mas simplesmente como "
612
 
"a identidade e a igualdade do objeto de Java têm que ser implementadas."
613
 
 
614
 
#. Tag: title
615
 
#: transactions.xml:334
616
 
#, no-c-format
617
 
msgid "Common issues"
618
 
msgstr "Edições comuns"
619
 
 
620
 
#. Tag: para
621
 
#: transactions.xml:336
622
 
#, fuzzy, no-c-format
623
 
msgid ""
624
 
"Do not use the anti-patterns <emphasis>session-per-user-session</emphasis> "
625
 
"or <emphasis>session-per-application</emphasis> (there are, however, rare "
626
 
"exceptions to this rule). Some of the following issues might also arise "
627
 
"within the recommended patterns, so ensure that you understand the "
628
 
"implications before making a design decision:"
629
 
msgstr ""
630
 
"Nunca use o anti-patterns <emphasis>session-per-user-session</emphasis> ou "
631
 
"<emphasis>session-per-application</emphasis> (naturalmente, há umas exceções "
632
 
"raras a essa regra). Note que algumas das seguintes edições podem também "
633
 
"aparecer com patterns recomendados, certifique-se que tenha compreendido as "
634
 
"implicações antes de fazer uma decisão de projeto:"
635
 
 
636
 
#. Tag: para
637
 
#: transactions.xml:345
638
 
#, fuzzy, no-c-format
639
 
msgid ""
640
 
"A <literal>Session</literal> is not thread-safe. Things that work "
641
 
"concurrently, like HTTP requests, session beans, or Swing workers, will "
642
 
"cause race conditions if a <literal>Session</literal> instance is shared. If "
643
 
"you keep your Hibernate <literal>Session</literal> in your "
644
 
"<literal>HttpSession</literal> (this is discussed later in the chapter), you "
645
 
"should consider synchronizing access to your Http session. Otherwise, a user "
646
 
"that clicks reload fast enough can use the same <literal>Session</literal> "
647
 
"in two concurrently running threads."
648
 
msgstr ""
649
 
"Uma <literal>Session</literal> não é threadsafe. As coisas que são supostas "
650
 
"para trabalhar concorrentemente, como requisições HTTP, session beans, ou "
651
 
"Swing, causarão condições de disputa se uma instância <literal>Session</"
652
 
"literal> for compartilhada. Se você mantiver sua <literal>Session</literal> "
653
 
"do Hibernate em seu <literal>HttpSession</literal> (discutido mais tarde), "
654
 
"você deve considerar sincronizar o acesso a sua sessão do HTTP. Caso "
655
 
"contrário, um usuário que clica em reload várias muito rapidamente pode usar "
656
 
"o mesmo <literal>Session</literal> em duas threads executando "
657
 
"concorrentemente."
658
 
 
659
 
#. Tag: para
660
 
#: transactions.xml:356
661
 
#, fuzzy, no-c-format
662
 
msgid ""
663
 
"An exception thrown by Hibernate means you have to rollback your database "
664
 
"transaction and close the <literal>Session</literal> immediately (this is "
665
 
"discussed in more detail later in the chapter). If your <literal>Session</"
666
 
"literal> is bound to the application, you have to stop the application. "
667
 
"Rolling back the database transaction does not put your business objects "
668
 
"back into the state they were at the start of the transaction. This means "
669
 
"that the database state and the business objects will be out of sync. "
670
 
"Usually this is not a problem, because exceptions are not recoverable and "
671
 
"you will have to start over after rollback anyway."
672
 
msgstr ""
673
 
"Uma exceção lançada pelo Hibernate significa que você tem que dar rollback "
674
 
"na sua transação no banco de dados e fechar a <literal>Session</literal> "
675
 
"imediatamente (discutido mais tarde em maiores detalhes). Se sua "
676
 
"<literal>Session</literal> é limitado pela aplicação, você tem que parar a "
677
 
"aplicação. Dando rollback na transação no banco de dados não põe seus "
678
 
"objetos do negócio em um estado anterior que estavam no início da transação. "
679
 
"Isto significa que o estado da base de dados e os objetos de negócio perdem "
680
 
"a sincronização. Geralmente não é um problema porque as exceções não são "
681
 
"recuperáveis e você tem que iniciar após o rollback de qualquer maneira."
682
 
 
683
 
#. Tag: para
684
 
#: transactions.xml:368
685
 
#, fuzzy, no-c-format
686
 
msgid ""
687
 
"The <literal>Session</literal> caches every object that is in a persistent "
688
 
"state (watched and checked for dirty state by Hibernate). If you keep it "
689
 
"open for a long time or simply load too much data, it will grow endlessly "
690
 
"until you get an OutOfMemoryException. One solution is to call <literal>clear"
691
 
"()</literal> and <literal>evict()</literal> to manage the <literal>Session</"
692
 
"literal> cache, but you should consider a Stored Procedure if you need mass "
693
 
"data operations. Some solutions are shown in <xref linkend=\"batch\"/>. "
694
 
"Keeping a <literal>Session</literal> open for the duration of a user session "
695
 
"also means a higher probability of stale data."
696
 
msgstr ""
697
 
"O <literal>Session</literal> guarda em cache cada objeto que está no estado "
698
 
"persistente (guardado e checado para estado \"sujo\" pelo Hibernate). Isto "
699
 
"significa que ele cresce infinitamente até que você obtenha uma "
700
 
"OutOfMemoryException, se você o mantiver aberto por muito tempo ou "
701
 
"simplesmente carregar dados demais. Uma solução é chamar <literal>clear()</"
702
 
"literal> e <literal>evict()</literal> para controlar o cache da "
703
 
"<literal>Session</literal>, mas você deve considerar uma Store Procedure se "
704
 
"precisar de operações que envolvam grande volume de dados. Algumas soluções "
705
 
"são mostradas no <xref linkend=\"batch\"/>. Manter uma <literal>Session</"
706
 
"literal> aberta durante uma sessão do usuário significa também uma "
707
 
"probabilidade elevada de se acabar com dados velhos."
708
 
 
709
 
#. Tag: title
710
 
#: transactions.xml:386
711
 
#, no-c-format
712
 
msgid "Database transaction demarcation"
713
 
msgstr "Demarcação de transações de bancos de dados"
714
 
 
715
 
#. Tag: para
716
 
#: transactions.xml:388
717
 
#, fuzzy, no-c-format
718
 
msgid ""
719
 
"Database, or system, transaction boundaries are always necessary. No "
720
 
"communication with the database can occur outside of a database transaction "
721
 
"(this seems to confuse many developers who are used to the auto-commit "
722
 
"mode). Always use clear transaction boundaries, even for read-only "
723
 
"operations. Depending on your isolation level and database capabilities this "
724
 
"might not be required, but there is no downside if you always demarcate "
725
 
"transactions explicitly. Certainly, a single database transaction is going "
726
 
"to perform better than many small transactions, even for reading data."
727
 
msgstr ""
728
 
"Os limites de uma transação de banco de dados (ou sistema) são sempre "
729
 
"necessários. Nenhuma comunicação com o banco de dados pode ocorrer fora de "
730
 
"uma transação de banco de dados (isto parece confundir muitos "
731
 
"desenvolvedores que estão usados modo auto-commit). Sempre use os limites "
732
 
"desobstruídos da transação, até mesmo para operações somente leitura. "
733
 
"Dependendo de seu nível de isolamento e capacidade da base de dados isto "
734
 
"pode não ser requerido, mas não há nenhum aspecto negativo se você demarca "
735
 
"sempre transações explicitamente. Certamente, uma única transação será "
736
 
"melhor executada do que muitas transações pequenas, até mesmo para dados de "
737
 
"leitura."
738
 
 
739
 
#. Tag: para
740
 
#: transactions.xml:398
741
 
#, fuzzy, no-c-format
742
 
msgid ""
743
 
"A Hibernate application can run in non-managed (i.e., standalone, simple "
744
 
"Web- or Swing applications) and managed J2EE environments. In a non-managed "
745
 
"environment, Hibernate is usually responsible for its own database "
746
 
"connection pool. The application developer has to manually set transaction "
747
 
"boundaries (begin, commit, or rollback database transactions) themselves. A "
748
 
"managed environment usually provides container-managed transactions (CMT), "
749
 
"with the transaction assembly defined declaratively (in deployment "
750
 
"descriptors of EJB session beans, for example). Programmatic transaction "
751
 
"demarcation is then no longer necessary."
752
 
msgstr ""
753
 
"Uma aplicação do Hibernate pode funcionar em ambientes não gerenciados (isto "
754
 
"é aplicações standalone, Web simples ou Swing) e ambientes gerenciados J2EE. "
755
 
"Em um ambiente não gerenciado, o Hibernate é geralmente responsável pelo seu "
756
 
"próprio pool de conexões. O desenvolvedor tem que manualmente ajustar "
757
 
"limites das transaçãos, ou seja, começar, commitar, ou dar rollback nas "
758
 
"transações ele mesmo. Um ambiente gerenciado fornece transações gerenciadas "
759
 
"por contêiner (CMT - container-managed transactions), com um conjunto da "
760
 
"transações definido declarativamente em descritores de deployment de EJB "
761
 
"session beans, por exemplo. A demarcação programática é então já não é "
762
 
"necessário."
763
 
 
764
 
#. Tag: para
765
 
#: transactions.xml:408
766
 
#, fuzzy, no-c-format
767
 
msgid ""
768
 
"However, it is often desirable to keep your persistence layer portable "
769
 
"between non-managed resource-local environments, and systems that can rely "
770
 
"on JTA but use BMT instead of CMT. In both cases use programmatic "
771
 
"transaction demarcation. Hibernate offers a wrapper API called "
772
 
"<literal>Transaction</literal> that translates into the native transaction "
773
 
"system of your deployment environment. This API is actually optional, but we "
774
 
"strongly encourage its use unless you are in a CMT session bean."
775
 
msgstr ""
776
 
"Entretanto, é freqüentemente desejável manter sua camada de persistência "
777
 
"portável entre ambientes de recurso locais não gerenciados e sistemas que "
778
 
"podem confiar em JTA, mas usar BMT em vez de CMT. Em ambos os casos você "
779
 
"usaria demarcação de transação programática. O Hibernate oferece uma API "
780
 
"chamada Transaction que traduz dentro do sistema de transação nativa de seu "
781
 
"ambiente de deployment. Esta API é realmente opcional, mas nós encorajamos "
782
 
"fortemente seu uso a menos que você estiver em um CMT session bean."
783
 
 
784
 
#. Tag: para
785
 
#: transactions.xml:417
786
 
#, fuzzy, no-c-format
787
 
msgid ""
788
 
"Ending a <literal>Session</literal> usually involves four distinct phases:"
789
 
msgstr ""
790
 
"Geralmente, finalizar um <literal>Session</literal>envolve quatro fases "
791
 
"distintas:"
792
 
 
793
 
#. Tag: para
794
 
#: transactions.xml:423
795
 
#, no-c-format
796
 
msgid "flush the session"
797
 
msgstr "flush da sessão"
798
 
 
799
 
#. Tag: para
800
 
#: transactions.xml:428
801
 
#, no-c-format
802
 
msgid "commit the transaction"
803
 
msgstr "commitar a transação"
804
 
 
805
 
#. Tag: para
806
 
#: transactions.xml:433
807
 
#, no-c-format
808
 
msgid "close the session"
809
 
msgstr "fechar a sessão"
810
 
 
811
 
#. Tag: para
812
 
#: transactions.xml:438
813
 
#, no-c-format
814
 
msgid "handle exceptions"
815
 
msgstr "tratar as exceções"
816
 
 
817
 
#. Tag: para
818
 
#: transactions.xml:444
819
 
#, fuzzy, no-c-format
820
 
msgid ""
821
 
"We discussed Flushing the session earlier, so we will now have a closer look "
822
 
"at transaction demarcation and exception handling in both managed and non-"
823
 
"managed environments."
824
 
msgstr ""
825
 
"A limpeza da sessão já foi bem discutida, agora nós daremos uma olhada na "
826
 
"demarcação da transação e na manipulação de exceção em ambientes controlados "
827
 
"e não controlados."
828
 
 
829
 
#. Tag: title
830
 
#: transactions.xml:451
831
 
#, no-c-format
832
 
msgid "Non-managed environment"
833
 
msgstr "Ambiente não gerenciado"
834
 
 
835
 
#. Tag: para
836
 
#: transactions.xml:453
837
 
#, fuzzy, no-c-format
838
 
msgid ""
839
 
"If a Hibernate persistence layer runs in a non-managed environment, database "
840
 
"connections are usually handled by simple (i.e., non-DataSource) connection "
841
 
"pools from which Hibernate obtains connections as needed. The session/"
842
 
"transaction handling idiom looks like this:"
843
 
msgstr ""
844
 
"Se uma camada de persistência do Hibernate roda em um ambiente não "
845
 
"gerenciado, as conexões do banco de dados são geralmente tratadas pelos "
846
 
"pools de conexões simples (isto é, não baseados em DataSource) dos quais o "
847
 
"Hibernate obtém as conexões assim que necessita. A maneira de se manipular "
848
 
"uma sessão/transação é mais ou menos assim:"
849
 
 
850
 
#. Tag: programlisting
851
 
#: transactions.xml:460
852
 
#, no-c-format
853
 
msgid ""
854
 
"<![CDATA[// Non-managed environment idiom\n"
855
 
"Session sess = factory.openSession();\n"
856
 
"Transaction tx = null;\n"
857
 
"try {\n"
858
 
"    tx = sess.beginTransaction();\n"
859
 
"\n"
860
 
"    // do some work\n"
861
 
"    ...\n"
862
 
"\n"
863
 
"    tx.commit();\n"
864
 
"}\n"
865
 
"catch (RuntimeException e) {\n"
866
 
"    if (tx != null) tx.rollback();\n"
867
 
"    throw e; // or display error message\n"
868
 
"}\n"
869
 
"finally {\n"
870
 
"    sess.close();\n"
871
 
"}]]>"
872
 
msgstr ""
873
 
 
874
 
#. Tag: para
875
 
#: transactions.xml:462
876
 
#, fuzzy, no-c-format
877
 
msgid ""
878
 
"You do not have to <literal>flush()</literal> the <literal>Session</literal> "
879
 
"explicitly: the call to <literal>commit()</literal> automatically triggers "
880
 
"the synchronization depending on the <link linkend=\"objectstate-flushing"
881
 
"\">FlushMode</link> for the session. A call to <literal>close()</literal> "
882
 
"marks the end of a session. The main implication of <literal>close()</"
883
 
"literal> is that the JDBC connection will be relinquished by the session. "
884
 
"This Java code is portable and runs in both non-managed and JTA environments."
885
 
msgstr ""
886
 
"Você não pode chamar <literal>flush()</literal> do <literal>Session()</"
887
 
"literal> explicitamente - a chamada ao <literal>commit()</literal> dispara "
888
 
"automaticamente a sincronização para a sessão (dependendo do <xref linkend="
889
 
"\"objectstate-flushing\"> FlushMode</xref>). Uma chamada ao <literal>close()"
890
 
"</literal> marca o fim de uma sessão. A principal implicação do "
891
 
"<literal>close()</literal> é que a conexão JDBC será abandonada pela sessão. "
892
 
"Este código Java é portável e funciona em ambientes não gerenciado e de JTA."
893
 
 
894
 
#. Tag: para
895
 
#: transactions.xml:471
896
 
#, fuzzy, no-c-format
897
 
msgid ""
898
 
"As outlined earlier, a much more flexible solution is Hibernate's built-in "
899
 
"\"current session\" context management:"
900
 
msgstr ""
901
 
"Uma solução muito mais flexível é gerência integrada de contexto da \"sessão "
902
 
"atual\" do Hibernate, como descrito anteriormente:"
903
 
 
904
 
#. Tag: programlisting
905
 
#: transactions.xml:476
906
 
#, no-c-format
907
 
msgid ""
908
 
"<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
909
 
"try {\n"
910
 
"    factory.getCurrentSession().beginTransaction();\n"
911
 
"\n"
912
 
"    // do some work\n"
913
 
"    ...\n"
914
 
"\n"
915
 
"    factory.getCurrentSession().getTransaction().commit();\n"
916
 
"}\n"
917
 
"catch (RuntimeException e) {\n"
918
 
"    factory.getCurrentSession().getTransaction().rollback();\n"
919
 
"    throw e; // or display error message\n"
920
 
"}]]>"
921
 
msgstr ""
922
 
 
923
 
#. Tag: para
924
 
#: transactions.xml:478
925
 
#, fuzzy, no-c-format
926
 
msgid ""
927
 
"You will not see these code snippets in a regular application; fatal "
928
 
"(system) exceptions should always be caught at the \"top\". In other words, "
929
 
"the code that executes Hibernate calls in the persistence layer, and the "
930
 
"code that handles <literal>RuntimeException</literal> (and usually can only "
931
 
"clean up and exit), are in different layers. The current context management "
932
 
"by Hibernate can significantly simplify this design by accessing a "
933
 
"<literal>SessionFactory</literal>. Exception handling is discussed later in "
934
 
"this chapter."
935
 
msgstr ""
936
 
"Você muito provavelmente nunca verá estes fragmentos de código em uma "
937
 
"aplicação regular; as exceções fatais (do sistema) devem sempre ser pegas no "
938
 
"\"alto\". Ou seja, o código que executa chamadas do Hibernate (na camada de "
939
 
"persistência) e o código que trata <literal>RuntimeException</literal> (e "
940
 
"geralmente pode somente limpar acima e na saída) estão em camadas "
941
 
"diferentes. O gerenciamento do contexto atual feito pelo Hibernate pode "
942
 
"significativamente simplificar este projeto, como tudo que você necessita é "
943
 
"do acesso a um <literal>SessionFactory</literal>. A manipulação de exceção é "
944
 
"discutida mais tarde neste capítulo."
945
 
 
946
 
#. Tag: para
947
 
#: transactions.xml:488
948
 
#, fuzzy, no-c-format
949
 
msgid ""
950
 
"You should select <literal>org.hibernate.transaction.JDBCTransactionFactory</"
951
 
"literal>, which is the default, and for the second example select <literal>"
952
 
"\"thread\"</literal> as your <literal>hibernate."
953
 
"current_session_context_class</literal>."
954
 
msgstr ""
955
 
"Note que você deve selecionar <literal>org.hibernate.transaction."
956
 
"JDBCTransactionFactory</literal> (que é o padrão) e para o segundo exemplo "
957
 
"<literal>\"thread\"</literal> como seu <literal>hibernate."
958
 
"current_session_context_class</literal>."
959
 
 
960
 
#. Tag: title
961
 
#: transactions.xml:497
962
 
#, no-c-format
963
 
msgid "Using JTA"
964
 
msgstr "Usando JTA"
965
 
 
966
 
#. Tag: para
967
 
#: transactions.xml:499
968
 
#, fuzzy, no-c-format
969
 
msgid ""
970
 
"If your persistence layer runs in an application server (for example, behind "
971
 
"EJB session beans), every datasource connection obtained by Hibernate will "
972
 
"automatically be part of the global JTA transaction. You can also install a "
973
 
"standalone JTA implementation and use it without EJB. Hibernate offers two "
974
 
"strategies for JTA integration."
975
 
msgstr ""
976
 
"Se sua camada de persistência funcionar em um servidor de aplicação (por "
977
 
"exemplo, dentro dos EJB session beans), cada conexão do datasource obtida "
978
 
"pelo Hibernate automaticamente fará parte da transação global de JTA. Você "
979
 
"pode também instalar uma implementação standalone de JTA e usá-la sem EJB. O "
980
 
"Hibernate oferece duas estratégias para a integração de JTA."
981
 
 
982
 
#. Tag: para
983
 
#: transactions.xml:506
984
 
#, fuzzy, no-c-format
985
 
msgid ""
986
 
"If you use bean-managed transactions (BMT), Hibernate will tell the "
987
 
"application server to start and end a BMT transaction if you use the "
988
 
"<literal>Transaction</literal> API. The transaction management code is "
989
 
"identical to the non-managed environment."
990
 
msgstr ""
991
 
"Se você usar bean-managed transactions (BMT - transações gerenciadas por "
992
 
"bean) o Hibernate dirá ao servidor de aplicação para começar e para terminar "
993
 
"uma transação de BMT se você usar a API Transaction. Assim, o código de "
994
 
"gerência de transação é idêntico ao ambiente não gerenciado."
995
 
 
996
 
#. Tag: programlisting
997
 
#: transactions.xml:512
998
 
#, no-c-format
999
 
msgid ""
1000
 
"<![CDATA[// BMT idiom\n"
1001
 
"Session sess = factory.openSession();\n"
1002
 
"Transaction tx = null;\n"
1003
 
"try {\n"
1004
 
"    tx = sess.beginTransaction();\n"
1005
 
"\n"
1006
 
"    // do some work\n"
1007
 
"    ...\n"
1008
 
"\n"
1009
 
"    tx.commit();\n"
1010
 
"}\n"
1011
 
"catch (RuntimeException e) {\n"
1012
 
"    if (tx != null) tx.rollback();\n"
1013
 
"    throw e; // or display error message\n"
1014
 
"}\n"
1015
 
"finally {\n"
1016
 
"    sess.close();\n"
1017
 
"}]]>"
1018
 
msgstr ""
1019
 
 
1020
 
#. Tag: para
1021
 
#: transactions.xml:514
1022
 
#, fuzzy, no-c-format
1023
 
msgid ""
1024
 
"If you want to use a transaction-bound <literal>Session</literal>, that is, "
1025
 
"the <literal>getCurrentSession()</literal> functionality for easy context "
1026
 
"propagation, use the JTA <literal>UserTransaction</literal> API directly:"
1027
 
msgstr ""
1028
 
"Se você quiser usar um <literal>Session</literal> limitada por transação, "
1029
 
"isto é, a funcionalidade do <literal>getCurrentSession()</literal> para a "
1030
 
"propagação fácil do contexto, você terá que usar diretamente a API JTA "
1031
 
"<literal>UserTransaction</literal>:"
1032
 
 
1033
 
#. Tag: programlisting
1034
 
#: transactions.xml:520
1035
 
#, no-c-format
1036
 
msgid ""
1037
 
"<![CDATA[// BMT idiom with getCurrentSession()\n"
1038
 
"try {\n"
1039
 
"    UserTransaction tx = (UserTransaction)new InitialContext()\n"
1040
 
"                            .lookup(\"java:comp/UserTransaction\");\n"
1041
 
"\n"
1042
 
"    tx.begin();\n"
1043
 
"\n"
1044
 
"    // Do some work on Session bound to transaction\n"
1045
 
"    factory.getCurrentSession().load(...);\n"
1046
 
"    factory.getCurrentSession().persist(...);\n"
1047
 
"\n"
1048
 
"    tx.commit();\n"
1049
 
"}\n"
1050
 
"catch (RuntimeException e) {\n"
1051
 
"    tx.rollback();\n"
1052
 
"    throw e; // or display error message\n"
1053
 
"}]]>"
1054
 
msgstr ""
1055
 
 
1056
 
#. Tag: para
1057
 
#: transactions.xml:522
1058
 
#, fuzzy, no-c-format
1059
 
msgid ""
1060
 
"With CMT, transaction demarcation is completed in session bean deployment "
1061
 
"descriptors, not programmatically. The code is reduced to:"
1062
 
msgstr ""
1063
 
"Com CMT, a demarcação da transação é feita em descritores de deployment do "
1064
 
"session beans, não programaticamente, conseqüentemente, o código é reduzido "
1065
 
"a:"
1066
 
 
1067
 
#. Tag: programlisting
1068
 
#: transactions.xml:527
1069
 
#, no-c-format
1070
 
msgid ""
1071
 
"<![CDATA[// CMT idiom\n"
1072
 
" Session sess = factory.getCurrentSession();\n"
1073
 
"\n"
1074
 
" // do some work\n"
1075
 
" ...\n"
1076
 
"]]>"
1077
 
msgstr ""
1078
 
 
1079
 
#. Tag: para
1080
 
#: transactions.xml:529
1081
 
#, fuzzy, no-c-format
1082
 
msgid ""
1083
 
"In a CMT/EJB, even rollback happens automatically. An unhandled "
1084
 
"<literal>RuntimeException</literal> thrown by a session bean method tells "
1085
 
"the container to set the global transaction to rollback. <emphasis>You do "
1086
 
"not need to use the Hibernate <literal>Transaction</literal> API at all with "
1087
 
"BMT or CMT, and you get automatic propagation of the \"current\" Session "
1088
 
"bound to the transaction.</emphasis>"
1089
 
msgstr ""
1090
 
"Em um CMT/EJB mesmo um rollback acontece automaticamente, desde que uma "
1091
 
"exeção <literal>RuntimeException</literal> não tratável seja lançada por um "
1092
 
"método de um session bean que informa ao contêiner ajustar a transação "
1093
 
"global ao rollback. <emphasis>Isto significa que você não necessita usar a "
1094
 
"API <literal>Transaction</literal> do Hibernate em tudo com BMT ou CMT e "
1095
 
"você obtém a propagação automática do Session \"atual\" limitada à transação."
1096
 
"</emphasis>"
1097
 
 
1098
 
#. Tag: para
1099
 
#: transactions.xml:537
1100
 
#, fuzzy, no-c-format
1101
 
msgid ""
1102
 
"When configuring Hibernate's transaction factory, choose <literal>org."
1103
 
"hibernate.transaction.JTATransactionFactory</literal> if you use JTA "
1104
 
"directly (BMT), and <literal>org.hibernate.transaction."
1105
 
"CMTTransactionFactory</literal> in a CMT session bean. Remember to also set "
1106
 
"<literal>hibernate.transaction.manager_lookup_class</literal>. Ensure that "
1107
 
"your <literal>hibernate.current_session_context_class</literal> is either "
1108
 
"unset (backwards compatibility), or is set to <literal>\"jta\"</literal>."
1109
 
msgstr ""
1110
 
"Veja que você deverá escolher <literal>org.hibernate.transaction."
1111
 
"JTATransactionFactory</literal> se você usar o JTA diretamente (BMT) e "
1112
 
"<literal>org.hibernate.transaction.CMTTransactionFactory</literal> em um CMT "
1113
 
"session bean, quando você configura a fábrica de transação do Hibernate. "
1114
 
"Lembre-se também de configurar o <literal>hibernate.transaction."
1115
 
"manager_lookup_class</literal>. Além disso, certifique-se que seu "
1116
 
"<literal>hibernate.current_session_context_class</literal> ou não é "
1117
 
"configurado (compatibilidade com o legado) ou é definido para <literal>\"jta"
1118
 
"\"</literal>."
1119
 
 
1120
 
#. Tag: para
1121
 
#: transactions.xml:546
1122
 
#, fuzzy, no-c-format
1123
 
msgid ""
1124
 
"The <literal>getCurrentSession()</literal> operation has one downside in a "
1125
 
"JTA environment. There is one caveat to the use of <literal>after_statement</"
1126
 
"literal> connection release mode, which is then used by default. Due to a "
1127
 
"limitation of the JTA spec, it is not possible for Hibernate to "
1128
 
"automatically clean up any unclosed <literal>ScrollableResults</literal> or "
1129
 
"<literal>Iterator</literal> instances returned by <literal>scroll()</"
1130
 
"literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> "
1131
 
"release the underlying database cursor by calling <literal>ScrollableResults."
1132
 
"close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicitly "
1133
 
"from a <literal>finally</literal> block. Most applications can easily avoid "
1134
 
"using <literal>scroll()</literal> or <literal>iterate()</literal> from the "
1135
 
"JTA or CMT code.)"
1136
 
msgstr ""
1137
 
"A operação <literal>getCurrentSession()</literal> tem um aspecto negativo em "
1138
 
"um ambiente JTA. Há uma advertência para o uso do método liberado de conexão "
1139
 
"<literal>after_statement</literal>, o qual é usado então por padrão. Devido "
1140
 
"a uma limitação simples da especificação JTA, não é possível para o "
1141
 
"Hibernate automaticamente limpar quaisquer instâncias "
1142
 
"<literal>ScrollableResults</literal> ou <literal>Iterator</literal> abertas "
1143
 
"retornadas pelo <literal>scroll()</literal> ou <literal>iterate()</literal>. "
1144
 
"Você <emphasis>deve</emphasis> liberar o cursor subjacente da base de dados "
1145
 
"chamando <literal>ScrollableResults.close()</literal> ou <literal>Hibernate."
1146
 
"close(Iterator)</literal> explicitamente de um bloco <literal>finally</"
1147
 
"literal>. (Claro que a maioria de aplicações podem facilmente evitar o uso "
1148
 
"do <literal>scroll()</literal> ou do <literal>iterate()</literal> em todo "
1149
 
"código provindo do JTA ou do CMT.)"
1150
 
 
1151
 
#. Tag: title
1152
 
#: transactions.xml:562
1153
 
#, no-c-format
1154
 
msgid "Exception handling"
1155
 
msgstr "Tratamento de Exceção"
1156
 
 
1157
 
#. Tag: para
1158
 
#: transactions.xml:564
1159
 
#, fuzzy, no-c-format
1160
 
msgid ""
1161
 
"If the <literal>Session</literal> throws an exception, including any "
1162
 
"<literal>SQLException</literal>, immediately rollback the database "
1163
 
"transaction, call <literal>Session.close()</literal> and discard the "
1164
 
"<literal>Session</literal> instance. Certain methods of <literal>Session</"
1165
 
"literal> will <emphasis>not</emphasis> leave the session in a consistent "
1166
 
"state. No exception thrown by Hibernate can be treated as recoverable. "
1167
 
"Ensure that the <literal>Session</literal> will be closed by calling "
1168
 
"<literal>close()</literal> in a <literal>finally</literal> block."
1169
 
msgstr ""
1170
 
"Se a <literal>Session</literal> levantar uma exceção (incluindo qualquer "
1171
 
"<literal>SQLException</literal>), você deve imediatamente dar um rollback na "
1172
 
"transação do banco, chamando <literal>Session.close()</literal> e "
1173
 
"descartando a instância da <literal>Session</literal>. Certos métodos da "
1174
 
"<literal>Session</literal><literal>não</literal> deixarão a sessão em um "
1175
 
"estado inconsistente. Nenhuma exceção lançada pelo Hibernate pode ser "
1176
 
"recuperada. Certifique-se que a <literal>Session</literal> será fechada "
1177
 
"chamando <literal>close()</literal> no bloco <literal>finally</literal>."
1178
 
 
1179
 
#. Tag: para
1180
 
#: transactions.xml:575
1181
 
#, fuzzy, no-c-format
1182
 
msgid ""
1183
 
"The <literal>HibernateException</literal>, which wraps most of the errors "
1184
 
"that can occur in a Hibernate persistence layer, is an unchecked exception. "
1185
 
"It was not in older versions of Hibernate. In our opinion, we should not "
1186
 
"force the application developer to catch an unrecoverable exception at a low "
1187
 
"layer. In most systems, unchecked and fatal exceptions are handled in one of "
1188
 
"the first frames of the method call stack (i.e., in higher layers) and "
1189
 
"either an error message is presented to the application user or some other "
1190
 
"appropriate action is taken. Note that Hibernate might also throw other "
1191
 
"unchecked exceptions that are not a <literal>HibernateException</literal>. "
1192
 
"These are not recoverable and appropriate action should be taken."
1193
 
msgstr ""
1194
 
"A exceção <literal>HibernateException</literal>, a qual envolve a maioria "
1195
 
"dos erros que podem ocorrer em uma camada de persistência do Hibernate, é "
1196
 
"uma exceção unchecked ( não estava em umas versões mais antigas de "
1197
 
"Hibernate). Em nossa opinião, nós não devemos forçar o desenvolvedor a "
1198
 
"tratar uma exceção irrecuperável em uma camada mais baixa. Na maioria dos "
1199
 
"sistemas, as exceções unchecked e fatais são tratadas em um dos primeiros "
1200
 
"frames da pilha da chamada do método (isto é, em umas camadas mais elevadas) "
1201
 
"e uma mensagem de erro é apresentada ao usuário da aplicação (ou a alguma "
1202
 
"outra ação apropriada é feita). Note que Hibernate pode também lançar outras "
1203
 
"exceções unchecked que não são um <literal>HibernateException</literal>. "
1204
 
"Estas, também são, irrecuperáveis e uma ação apropriada deve ser tomada."
1205
 
 
1206
 
#. Tag: para
1207
 
#: transactions.xml:587
1208
 
#, fuzzy, no-c-format
1209
 
msgid ""
1210
 
"Hibernate wraps <literal>SQLException</literal>s thrown while interacting "
1211
 
"with the database in a <literal>JDBCException</literal>. In fact, Hibernate "
1212
 
"will attempt to convert the exception into a more meaningful subclass of "
1213
 
"<literal>JDBCException</literal>. The underlying <literal>SQLException</"
1214
 
"literal> is always available via <literal>JDBCException.getCause()</"
1215
 
"literal>. Hibernate converts the <literal>SQLException</literal> into an "
1216
 
"appropriate <literal>JDBCException</literal> subclass using the "
1217
 
"<literal>SQLExceptionConverter</literal> attached to the "
1218
 
"<literal>SessionFactory</literal>. By default, the "
1219
 
"<literal>SQLExceptionConverter</literal> is defined by the configured "
1220
 
"dialect. However, it is also possible to plug in a custom implementation. "
1221
 
"See the javadocs for the <literal>SQLExceptionConverterFactory</literal> "
1222
 
"class for details. The standard <literal>JDBCException</literal> subtypes "
1223
 
"are:"
1224
 
msgstr ""
1225
 
"O Hibernate envolve <literal>SQLException</literal>s lançadas ao interagir "
1226
 
"com a base de dados em um <literal>JDBCException</literal>. Na realidade, o "
1227
 
"Hibernate tentará converter a exceção em em uma sub classe mais "
1228
 
"significativa da <literal>JDBCException</literal>. A <literal>SQLException</"
1229
 
"literal> subjacente está sempre disponível através de <literal>JDBCException."
1230
 
"getCause()</literal>. O Hibernate converte a <literal>SQLException</literal> "
1231
 
"em uma sub classe <literal>JDBCException</literal> apropriada usando "
1232
 
"<literal>SQLExceptionConverter</literal> associado ao SessionFactory. Por "
1233
 
"padrão, o <literal>SQLExceptionConverter</literal> é definido pelo dialeto "
1234
 
"configurado; entretanto, é também possível conectar em uma implementação "
1235
 
"customizada (veja o javadoc para mais detalhes da classe "
1236
 
"<literal>SQLExceptionConverterFactory</literal>). Os subtipos padrão de "
1237
 
"<literal>JDBCException</literal> são:"
1238
 
 
1239
 
#. Tag: para
1240
 
#: transactions.xml:603
1241
 
#, fuzzy, no-c-format
1242
 
msgid ""
1243
 
"<literal>JDBCConnectionException</literal>: indicates an error with the "
1244
 
"underlying JDBC communication."
1245
 
msgstr ""
1246
 
"<literal>JDBCConnectionException</literal> - indica um erro com a "
1247
 
"comunicação subjacente de JDBC."
1248
 
 
1249
 
#. Tag: para
1250
 
#: transactions.xml:609
1251
 
#, fuzzy, no-c-format
1252
 
msgid ""
1253
 
"<literal>SQLGrammarException</literal>: indicates a grammar or syntax "
1254
 
"problem with the issued SQL."
1255
 
msgstr ""
1256
 
"<literal>SQLGrammarException</literal> - indica um problema da gramática ou "
1257
 
"da sintaxe com o SQL emitido."
1258
 
 
1259
 
#. Tag: para
1260
 
#: transactions.xml:615
1261
 
#, fuzzy, no-c-format
1262
 
msgid ""
1263
 
"<literal>ConstraintViolationException</literal>: indicates some form of "
1264
 
"integrity constraint violation."
1265
 
msgstr ""
1266
 
"<literal>ConstraintViolationException</literal> - indica algum forma de "
1267
 
"violação de confinamento de integridade."
1268
 
 
1269
 
#. Tag: para
1270
 
#: transactions.xml:621
1271
 
#, fuzzy, no-c-format
1272
 
msgid ""
1273
 
"<literal>LockAcquisitionException</literal>: indicates an error acquiring a "
1274
 
"lock level necessary to perform the requested operation."
1275
 
msgstr ""
1276
 
"<literal>LockAcquisitionException</literal> - indica um erro ao adquirir um "
1277
 
"nível de bloqueio necessário para realizar a operação de requisição."
1278
 
 
1279
 
#. Tag: para
1280
 
#: transactions.xml:627
1281
 
#, fuzzy, no-c-format
1282
 
msgid ""
1283
 
"<literal>GenericJDBCException</literal>: a generic exception which did not "
1284
 
"fall into any of the other categories."
1285
 
msgstr ""
1286
 
"<literal>GenericJDBCException</literal> - uma exceção genérica que não cai "
1287
 
"em algumas das outras categorias."
1288
 
 
1289
 
#. Tag: title
1290
 
#: transactions.xml:637
1291
 
#, no-c-format
1292
 
msgid "Transaction timeout"
1293
 
msgstr "Timeout de Transação"
1294
 
 
1295
 
#. Tag: para
1296
 
#: transactions.xml:639
1297
 
#, fuzzy, no-c-format
1298
 
msgid ""
1299
 
"An important feature provided by a managed environment like EJB, that is "
1300
 
"never provided for non-managed code, is transaction timeout. Transaction "
1301
 
"timeouts ensure that no misbehaving transaction can indefinitely tie up "
1302
 
"resources while returning no response to the user. Outside a managed (JTA) "
1303
 
"environment, Hibernate cannot fully provide this functionality. However, "
1304
 
"Hibernate can at least control data access operations, ensuring that "
1305
 
"database level deadlocks and queries with huge result sets are limited by a "
1306
 
"defined timeout. In a managed environment, Hibernate can delegate "
1307
 
"transaction timeout to JTA. This functionality is abstracted by the "
1308
 
"Hibernate <literal>Transaction</literal> object."
1309
 
msgstr ""
1310
 
"Uma característica extremamente importante fornecida por um ambiente "
1311
 
"gerenciado como EJB e que nunca é fornecido pelo código não gerenciado é o "
1312
 
"timeout de transação. Timeouts de transação asseguram que nenhuma transação "
1313
 
"possa reter indefinidamente recursos enquanto não retorna nenhuma resposta "
1314
 
"ao usuário. Fora de um ambiente controlado (JTA), o Hibernate não pode "
1315
 
"fornecer inteiramente esta funcionalidade. Entretanto, o Hibernate pode "
1316
 
"afinal controlar as operações do acesso a dados, assegurando que o nível de "
1317
 
"deadlocks e queries do banco de dados com imensos resultados definidos sejam "
1318
 
"limitados pelo timeout. Em um ambiente gerenciado, o Hibernate pode delegar "
1319
 
"o timeout da transação ao JTA. Esta funcionalidade é abstraída pelo objeto "
1320
 
"<literal>Transaction</literal> do Hibernate."
1321
 
 
1322
 
#. Tag: programlisting
1323
 
#: transactions.xml:652
1324
 
#, no-c-format
1325
 
msgid ""
1326
 
"<![CDATA[\n"
1327
 
"Session sess = factory.openSession();\n"
1328
 
"try {\n"
1329
 
"    //set transaction timeout to 3 seconds\n"
1330
 
"    sess.getTransaction().setTimeout(3);\n"
1331
 
"    sess.getTransaction().begin();\n"
1332
 
"\n"
1333
 
"    // do some work\n"
1334
 
"    ...\n"
1335
 
"\n"
1336
 
"    sess.getTransaction().commit()\n"
1337
 
"}\n"
1338
 
"catch (RuntimeException e) {\n"
1339
 
"    sess.getTransaction().rollback();\n"
1340
 
"    throw e; // or display error message\n"
1341
 
"}\n"
1342
 
"finally {\n"
1343
 
"    sess.close();\n"
1344
 
"}]]>"
1345
 
msgstr ""
1346
 
 
1347
 
#. Tag: para
1348
 
#: transactions.xml:654
1349
 
#, fuzzy, no-c-format
1350
 
msgid ""
1351
 
"<literal>setTimeout()</literal> cannot be called in a CMT bean, where "
1352
 
"transaction timeouts must be defined declaratively."
1353
 
msgstr ""
1354
 
"Veja que <literal>setTimeout()</literal> não pode ser chamado em um CMT "
1355
 
"bean, onde os timeouts das transações devem ser definidos declarativamente."
1356
 
 
1357
 
#. Tag: title
1358
 
#: transactions.xml:664
1359
 
#, no-c-format
1360
 
msgid "Optimistic concurrency control"
1361
 
msgstr "Controle de concorrência otimista"
1362
 
 
1363
 
#. Tag: para
1364
 
#: transactions.xml:666
1365
 
#, fuzzy, no-c-format
1366
 
msgid ""
1367
 
"The only approach that is consistent with high concurrency and high "
1368
 
"scalability, is optimistic concurrency control with versioning. Version "
1369
 
"checking uses version numbers, or timestamps, to detect conflicting updates "
1370
 
"and to prevent lost updates. Hibernate provides three possible approaches to "
1371
 
"writing application code that uses optimistic concurrency. The use cases we "
1372
 
"discuss are in the context of long conversations, but version checking also "
1373
 
"has the benefit of preventing lost updates in single database transactions."
1374
 
msgstr ""
1375
 
"O único caminho que é consistente com a elevada concorrência e "
1376
 
"escalabilidade é controle de concorrência otimista com versionamento. "
1377
 
"Checagem de versão usa número de versão, ou timestamps, para detectar "
1378
 
"conflitos de atualizações (e para impedir atualizações perdidas). O "
1379
 
"Hibernate fornece três caminhos possíveis para escrever aplicações que usam "
1380
 
"concorrência otimista. Os casos de uso que nós mostramos estão no contexto "
1381
 
"de conversações longas, mas a checagem de versão também tem o benefício de "
1382
 
"impedir atualizações perdidas em únicas transações."
1383
 
 
1384
 
#. Tag: title
1385
 
#: transactions.xml:677
1386
 
#, no-c-format
1387
 
msgid "Application version checking"
1388
 
msgstr "Checagem de versão da aplicação"
1389
 
 
1390
 
#. Tag: para
1391
 
#: transactions.xml:679
1392
 
#, fuzzy, no-c-format
1393
 
msgid ""
1394
 
"In an implementation without much help from Hibernate, each interaction with "
1395
 
"the database occurs in a new <literal>Session</literal> and the developer is "
1396
 
"responsible for reloading all persistent instances from the database before "
1397
 
"manipulating them. The application is forced to carry out its own version "
1398
 
"checking to ensure conversation transaction isolation. This approach is the "
1399
 
"least efficient in terms of database access. It is the approach most similar "
1400
 
"to entity EJBs."
1401
 
msgstr ""
1402
 
"Em uma implementação sem muita ajuda do Hibernate, cada interação com o "
1403
 
"banco de dados ocorre em uma nova <literal>Session</literal> e o "
1404
 
"desenvolvedor é responsável para recarregar todas as instâncias persistentes "
1405
 
"da base de dados antes de manipulá-las. Este caminho força a aplicação a "
1406
 
"realizar sua própria checagem de versão para assegurar a conversação do "
1407
 
"isolamento da transação. Este caminho é menos eficiente em termos de acesso "
1408
 
"ao banco de dados. É a caminho mais similar a EJBs entity."
1409
 
 
1410
 
#. Tag: programlisting
1411
 
#: transactions.xml:688
1412
 
#, no-c-format
1413
 
msgid ""
1414
 
"<![CDATA[// foo is an instance loaded by a previous Session\n"
1415
 
"session = factory.openSession();\n"
1416
 
"Transaction t = session.beginTransaction();\n"
1417
 
"\n"
1418
 
"int oldVersion = foo.getVersion();\n"
1419
 
"session.load( foo, foo.getKey() ); // load the current state\n"
1420
 
"if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException"
1421
 
"();\n"
1422
 
"foo.setProperty(\"bar\");\n"
1423
 
"\n"
1424
 
"t.commit();\n"
1425
 
"session.close();]]>"
1426
 
msgstr ""
1427
 
 
1428
 
#. Tag: para
1429
 
#: transactions.xml:690
1430
 
#, no-c-format
1431
 
msgid ""
1432
 
"The <literal>version</literal> property is mapped using <literal>&lt;"
1433
 
"version&gt;</literal>, and Hibernate will automatically increment it during "
1434
 
"flush if the entity is dirty."
1435
 
msgstr ""
1436
 
"A propriedade <literal>version</literal> é mapeada usando <literal>&lt;"
1437
 
"version&gt;</literal>, e o Hibernate vai incrementá-lo-á automaticamente "
1438
 
"durante o flush se a entidade estiver alterada."
1439
 
 
1440
 
#. Tag: para
1441
 
#: transactions.xml:696
1442
 
#, fuzzy, no-c-format
1443
 
msgid ""
1444
 
"If you are operating in a low-data-concurrency environment, and do not "
1445
 
"require version checking, you can use this approach and skip the version "
1446
 
"check. In this case, <emphasis>last commit wins</emphasis> is the default "
1447
 
"strategy for long conversations. Be aware that this might confuse the users "
1448
 
"of the application, as they might experience lost updates without error "
1449
 
"messages or a chance to merge conflicting changes."
1450
 
msgstr ""
1451
 
"Claro, se você se estiver operando em um ambiente de baixa concorrência de "
1452
 
"dados e não requerer a checagem de versão, você pode usar este caminho e "
1453
 
"apenas saltar a checagem de versão. Nesse caso, o <emphasis>ultimo commit "
1454
 
"realizdo </emphasis> é a estratégia padrão para suas conversações longas. "
1455
 
"Mantenha em mente que isto pode confundir os usuários da aplicação, assim "
1456
 
"como eles podem experimentar atualizações perdidas sem mensagens de erro ou "
1457
 
"uma possibilidade ajustar mudanças de conflito."
1458
 
 
1459
 
#. Tag: para
1460
 
#: transactions.xml:705
1461
 
#, fuzzy, no-c-format
1462
 
msgid ""
1463
 
"Manual version checking is only feasible in trivial circumstances and not "
1464
 
"practical for most applications. Often not only single instances, but "
1465
 
"complete graphs of modified objects, have to be checked. Hibernate offers "
1466
 
"automatic version checking with either an extended <literal>Session</"
1467
 
"literal> or detached instances as the design paradigm."
1468
 
msgstr ""
1469
 
"Claro que, checagem manual da versão é somente praticável em circunstâncias "
1470
 
"triviais e não para a maioria de aplicações. Freqüentemente, os grafos "
1471
 
"completos de objetos modificados têm que ser verificados, não somente únicas "
1472
 
"instâncias. O Hibernate oferece checagem de versão automática com uma "
1473
 
"<literal>Session</literal> estendida ou instâncias desatachadas como o "
1474
 
"paradigma do projeto."
1475
 
 
1476
 
#. Tag: title
1477
 
#: transactions.xml:716
1478
 
#, no-c-format
1479
 
msgid "Extended session and automatic versioning"
1480
 
msgstr "Sessão estendida e versionamento automático"
1481
 
 
1482
 
#. Tag: para
1483
 
#: transactions.xml:718
1484
 
#, fuzzy, no-c-format
1485
 
msgid ""
1486
 
"A single <literal>Session</literal> instance and its persistent instances "
1487
 
"that are used for the whole conversation are known as <emphasis>session-per-"
1488
 
"conversation</emphasis>. Hibernate checks instance versions at flush time, "
1489
 
"throwing an exception if concurrent modification is detected. It is up to "
1490
 
"the developer to catch and handle this exception. Common options are the "
1491
 
"opportunity for the user to merge changes or to restart the business "
1492
 
"conversation with non-stale data."
1493
 
msgstr ""
1494
 
"Uma única instância de <literal>Session</literal> e suas instâncias "
1495
 
"persistentes são usadas para a conversação inteira, isto é conhecido como "
1496
 
"<emphasis>session-per-conversation</emphasis>. O Hibernate verifica versões "
1497
 
"da instância no momento dio flush, lançando uma exceção se a modificação "
1498
 
"concorrente for detectada. Até o desenvolvedor pegar e tratar essa exceção "
1499
 
"(as opções comuns são a oportunidade para que o usuário intercale as "
1500
 
"mudanças ou reinicie a conversação do negócio com dados não antigos)."
1501
 
 
1502
 
#. Tag: para
1503
 
#: transactions.xml:727
1504
 
#, fuzzy, no-c-format
1505
 
msgid ""
1506
 
"The <literal>Session</literal> is disconnected from any underlying JDBC "
1507
 
"connection when waiting for user interaction. This approach is the most "
1508
 
"efficient in terms of database access. The application does not version "
1509
 
"check or reattach detached instances, nor does it have to reload instances "
1510
 
"in every database transaction."
1511
 
msgstr ""
1512
 
"The <literal>Session</literal> is disconnected from any underlying JDBC "
1513
 
"connection when waiting for user interaction. This approach is the most "
1514
 
"efficient in terms of database access. The application need not concern "
1515
 
"itself with version checking or with reattaching detached instances, nor "
1516
 
"does it have to reload instances in every database transaction. A "
1517
 
"<literal>Session</literal> é desconectada de toda a conexão JDBC subjacente "
1518
 
"enquanto espera a interação do usuário. Este caminho é a mais eficiente em "
1519
 
"termos de acesso a bancos de dados. A aplicação não necessita concernir-se "
1520
 
"com a checagem de versão ou com as instâncias destacadas reatadas, nem tem "
1521
 
"que recarregar instâncias em cada transação."
1522
 
 
1523
 
#. Tag: programlisting
1524
 
#: transactions.xml:735
1525
 
#, no-c-format
1526
 
msgid ""
1527
 
"<![CDATA[// foo is an instance loaded earlier by the old session\n"
1528
 
"Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, "
1529
 
"start transaction\n"
1530
 
"\n"
1531
 
"foo.setProperty(\"bar\");\n"
1532
 
"\n"
1533
 
"session.flush();    // Only for last transaction in conversation\n"
1534
 
"t.commit();         // Also return JDBC connection\n"
1535
 
"session.close();    // Only for last transaction in conversation]]>"
1536
 
msgstr ""
1537
 
 
1538
 
#. Tag: para
1539
 
#: transactions.xml:736
1540
 
#, fuzzy, no-c-format
1541
 
msgid ""
1542
 
"The <literal>foo</literal> object knows which <literal>Session</literal> it "
1543
 
"was loaded in. Beginning a new database transaction on an old session "
1544
 
"obtains a new connection and resumes the session. Committing a database "
1545
 
"transaction disconnects a session from the JDBC connection and returns the "
1546
 
"connection to the pool. After reconnection, to force a version check on data "
1547
 
"you are not updating, you can call <literal>Session.lock()</literal> with "
1548
 
"<literal>LockMode.READ</literal> on any objects that might have been updated "
1549
 
"by another transaction. You do not need to lock any data that you "
1550
 
"<emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode."
1551
 
"MANUAL</literal> on an extended <literal>Session</literal>, so that only the "
1552
 
"last database transaction cycle is allowed to actually persist all "
1553
 
"modifications made in this conversation. Only this last database transaction "
1554
 
"will include the <literal>flush()</literal> operation, and then "
1555
 
"<literal>close()</literal> the session to end the conversation."
1556
 
msgstr ""
1557
 
"O objeto <literal>foo</literal> sabe que <literal>Session</literal> já foi "
1558
 
"carregada. Começando uma nova transação em uma sessão velha obtém uma "
1559
 
"conexão nova e recomeça a sessão. Commitando uma transação desconecta uma "
1560
 
"sessão da conexão JDBC e retorna a conexão ao pool. Após a reconexão, forçar "
1561
 
"uma checagem de versão em dados que você não está atualizando, você pode "
1562
 
"chamar <literal>Session.lock()</literal> com o <literal>LockMode.READ</"
1563
 
"literal> em todos os objetos que possam ter sido atualizados por uma outra "
1564
 
"transação. Você não necessita bloquear nenhum dado para atualizar. "
1565
 
"Geralmente você configuraria <literal>FlushMode.MANUAL</literal> em uma "
1566
 
"<literal>Session</literal> estendida, de modo que somente o último ciclo da "
1567
 
"transação tenha permissão de persistir todas as modificações feitas nesta "
1568
 
"conversação. Disso, somente esta última transação incluiria a operação "
1569
 
"<literal>flush()</literal> e então chamar também <literal>close()</literal> "
1570
 
"da sessão para terminar a conversação."
1571
 
 
1572
 
#. Tag: para
1573
 
#: transactions.xml:751
1574
 
#, fuzzy, no-c-format
1575
 
msgid ""
1576
 
"This pattern is problematic if the <literal>Session</literal> is too big to "
1577
 
"be stored during user think time (for example, an <literal>HttpSession</"
1578
 
"literal> should be kept as small as possible). As the <literal>Session</"
1579
 
"literal> is also the first-level cache and contains all loaded objects, we "
1580
 
"can probably use this strategy only for a few request/response cycles. Use a "
1581
 
"<literal>Session</literal> only for a single conversation as it will soon "
1582
 
"have stale data."
1583
 
msgstr ""
1584
 
"Este pattern é problemático se a <literal>Session</literal> for "
1585
 
"demasiadamente grande para ser armazenado durante o tempo que usuário "
1586
 
"pensar, por exemplo um <literal>HttpSession</literal> estiver mantido tão "
1587
 
"pequeno quanto possível. Como o <literal>Session</literal> é também cache de "
1588
 
"primeiro nível (imperativo) e contém todos os objetos carregados, nós "
1589
 
"podemos provavelmente usar esta estratégia somente para alguns ciclos de "
1590
 
"requisição/resposta. Você deve usar a <literal>Session</literal> somente "
1591
 
"para uma única conversação, porque ela logo também estará com dados velhos."
1592
 
 
1593
 
#. Tag: title
1594
 
#: transactions.xml:762
1595
 
#, no-c-format
1596
 
msgid "Note"
1597
 
msgstr ""
1598
 
 
1599
 
#. Tag: para
1600
 
#: transactions.xml:763
1601
 
#, fuzzy, no-c-format
1602
 
msgid ""
1603
 
"Earlier versions of Hibernate required explicit disconnection and "
1604
 
"reconnection of a <literal>Session</literal>. These methods are deprecated, "
1605
 
"as beginning and ending a transaction has the same effect."
1606
 
msgstr ""
1607
 
"(Note que versões mais atuais de Hibernate requerem a desconexão e o "
1608
 
"reconexão explícitas de uma <literal>Session</literal>. Estes métodos são "
1609
 
"desatualizados, como o início e término de uma transação tem o mesmo efeito.)"
1610
 
 
1611
 
#. Tag: para
1612
 
#: transactions.xml:769
1613
 
#, fuzzy, no-c-format
1614
 
msgid ""
1615
 
"Keep the disconnected <literal>Session</literal> close to the persistence "
1616
 
"layer. Use an EJB stateful session bean to hold the <literal>Session</"
1617
 
"literal> in a three-tier environment. Do not transfer it to the web layer, "
1618
 
"or even serialize it to a separate tier, to store it in the "
1619
 
"<literal>HttpSession</literal>."
1620
 
msgstr ""
1621
 
"Note também que você deve manter a <literal>Session</literal> desconectada "
1622
 
"fechada para a camada de persistência. Ou seja, use um EJB stateful session "
1623
 
"bean para prender a <literal>Session</literal> em um ambiente do três "
1624
 
"camadas e não o transferir à camada web (ou até serializá-lo para uma camada "
1625
 
"separada) para armazená-lo no <literal>HttpSession</literal>."
1626
 
 
1627
 
#. Tag: para
1628
 
#: transactions.xml:777
1629
 
#, fuzzy, no-c-format
1630
 
msgid ""
1631
 
"The extended session pattern, or <emphasis>session-per-conversation</"
1632
 
"emphasis>, is more difficult to implement with automatic current session "
1633
 
"context management. You need to supply your own implementation of the "
1634
 
"<literal>CurrentSessionContext</literal> for this. See the Hibernate Wiki "
1635
 
"for examples."
1636
 
msgstr ""
1637
 
"O pattern sessão estendida, ou <emphasis>session-per-conversation</"
1638
 
"emphasis>, é mais difícil de implementar com gerenciamento automático de "
1639
 
"sessão atual. Você precisa fornecer sua própria implementação do "
1640
 
"<literal>CurrentSessionContext</literal> para isto (veja o Hibernate Wiki "
1641
 
"para exemplos)."
1642
 
 
1643
 
#. Tag: title
1644
 
#: transactions.xml:787
1645
 
#, no-c-format
1646
 
msgid "Detached objects and automatic versioning"
1647
 
msgstr "Objetos destacados e versionamento automático"
1648
 
 
1649
 
#. Tag: para
1650
 
#: transactions.xml:789
1651
 
#, no-c-format
1652
 
msgid ""
1653
 
"Each interaction with the persistent store occurs in a new <literal>Session</"
1654
 
"literal>. However, the same persistent instances are reused for each "
1655
 
"interaction with the database. The application manipulates the state of "
1656
 
"detached instances originally loaded in another <literal>Session</literal> "
1657
 
"and then reattaches them using <literal>Session.update()</literal>, "
1658
 
"<literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</"
1659
 
"literal>."
1660
 
msgstr ""
1661
 
"Cada interação com o armazenamento persistente ocorre em uma "
1662
 
"<literal>Session</literal> nova. Entretanto, as mesmas instâncias "
1663
 
"persistentes são reusadas para cada interação com o banco de dados. A "
1664
 
"aplicação manipula o estado das instâncias desatachadas originalmente "
1665
 
"carregadas em um outro <literal>Session</literal> e reata-os então usando "
1666
 
"<literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</"
1667
 
"literal> ou <literal>Session.merge()</literal>."
1668
 
 
1669
 
#. Tag: programlisting
1670
 
#: transactions.xml:797
1671
 
#, no-c-format
1672
 
msgid ""
1673
 
"<![CDATA[// foo is an instance loaded by a previous Session\n"
1674
 
"foo.setProperty(\"bar\");\n"
1675
 
"session = factory.openSession();\n"
1676
 
"Transaction t = session.beginTransaction();\n"
1677
 
"session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded "
1678
 
"already\n"
1679
 
"t.commit();\n"
1680
 
"session.close();]]>"
1681
 
msgstr ""
1682
 
 
1683
 
#. Tag: para
1684
 
#: transactions.xml:799
1685
 
#, fuzzy, no-c-format
1686
 
msgid ""
1687
 
"Again, Hibernate will check instance versions during flush, throwing an "
1688
 
"exception if conflicting updates occurred."
1689
 
msgstr ""
1690
 
"Outra vez, o Hibernate verificará versões da instância durante o flush, "
1691
 
"lançando uma exceção se ocorrer conflitos de atualizações."
1692
 
 
1693
 
#. Tag: para
1694
 
#: transactions.xml:804
1695
 
#, fuzzy, no-c-format
1696
 
msgid ""
1697
 
"You can also call <literal>lock()</literal> instead of <literal>update()</"
1698
 
"literal>, and use <literal>LockMode.READ</literal> (performing a version "
1699
 
"check and bypassing all caches) if you are sure that the object has not been "
1700
 
"modified."
1701
 
msgstr ""
1702
 
"Você pode também chamar o <literal>lock()</literal> em vez de <literal>update"
1703
 
"()</literal> e usar <literal>LockMode.READ</literal> (executando uma "
1704
 
"checagem de versão, ignorando todos os caches) se você estiver certo de que "
1705
 
"o objeto não foi modificado."
1706
 
 
1707
 
#. Tag: title
1708
 
#: transactions.xml:813
1709
 
#, no-c-format
1710
 
msgid "Customizing automatic versioning"
1711
 
msgstr "Versionamento automático customizado"
1712
 
 
1713
 
#. Tag: para
1714
 
#: transactions.xml:815
1715
 
#, fuzzy, no-c-format
1716
 
msgid ""
1717
 
"You can disable Hibernate's automatic version increment for particular "
1718
 
"properties and collections by setting the <literal>optimistic-lock</literal> "
1719
 
"mapping attribute to <literal>false</literal>. Hibernate will then no longer "
1720
 
"increment versions if the property is dirty."
1721
 
msgstr ""
1722
 
"Você pode desabilitar o incremento da versão automática de Hibernate para "
1723
 
"propriedades e coleções particulares configurando o mapeamento do atributo "
1724
 
"<literal>optimistic-lock</literal> para false. O Hibernate então não irá "
1725
 
"incrementa versões se a propriedade estiver modificada."
1726
 
 
1727
 
#. Tag: para
1728
 
#: transactions.xml:822
1729
 
#, fuzzy, no-c-format
1730
 
msgid ""
1731
 
"Legacy database schemas are often static and cannot be modified. Or, other "
1732
 
"applications might access the same database and will not know how to handle "
1733
 
"version numbers or even timestamps. In both cases, versioning cannot rely on "
1734
 
"a particular column in a table. To force a version check with a comparison "
1735
 
"of the state of all fields in a row but without a version or timestamp "
1736
 
"property mapping, turn on <literal>optimistic-lock=\"all\"</literal> in the "
1737
 
"<literal>&lt;class&gt;</literal> mapping. This conceptually only works if "
1738
 
"Hibernate can compare the old and the new state (i.e., if you use a single "
1739
 
"long <literal>Session</literal> and not session-per-request-with-detached-"
1740
 
"objects)."
1741
 
msgstr ""
1742
 
"Os esquemas da base de dados legada são freqüentemente estáticos e não podem "
1743
 
"ser modificados. Ou outras aplicações puderam também acessar a mesma base de "
1744
 
"dados e não sabem tratar a versão dos números ou timestamps. Em ambos os "
1745
 
"casos, o versionamento não pode confiar em uma coluna particular em uma "
1746
 
"tabela. Para forçar uma checagem de versão sem uma versão ou mapeamento da "
1747
 
"propriedade do timestamp com uma comparação do estado de todos os campos em "
1748
 
"uma linha, configure <literal>optimistic-lock=\"all\"</literal> no "
1749
 
"mapeamento <literal>&lt;class&gt;</literal>. Note que isto conceitualmente é "
1750
 
"somente feito em trabalhos se Hibernate puder comparar o estado velho e "
1751
 
"novo, isto é, se você usa um único <literal>Session</literal> longo e não "
1752
 
"session-per-request-with-detached-objects."
1753
 
 
1754
 
#. Tag: para
1755
 
#: transactions.xml:834
1756
 
#, fuzzy, no-c-format
1757
 
msgid ""
1758
 
"Concurrent modification can be permitted in instances where the changes that "
1759
 
"have been made do not overlap. If you set <literal>optimistic-lock=\"dirty"
1760
 
"\"</literal> when mapping the <literal>&lt;class&gt;</literal>, Hibernate "
1761
 
"will only compare dirty fields during flush."
1762
 
msgstr ""
1763
 
"Às vezes a modificação concorrente pode ser permitida tão longa quanto às "
1764
 
"mudanças que tiveram sido feitas que não sobrepuseram. Se você configurar "
1765
 
"<literal>optimistic-lock=\"dirty\"</literal> ao mapear o <literal>&lt;"
1766
 
"class&gt;</literal>, o Hibernate comparará somente campos modificados "
1767
 
"durante o flush."
1768
 
 
1769
 
#. Tag: para
1770
 
#: transactions.xml:840
1771
 
#, fuzzy, no-c-format
1772
 
msgid ""
1773
 
"In both cases, with dedicated version/timestamp columns or with a full/dirty "
1774
 
"field comparison, Hibernate uses a single <literal>UPDATE</literal> "
1775
 
"statement, with an appropriate <literal>WHERE</literal> clause, per entity "
1776
 
"to execute the version check and update the information. If you use "
1777
 
"transitive persistence to cascade reattachment to associated entities, "
1778
 
"Hibernate may execute unnecessary updates. This is usually not a problem, "
1779
 
"but <emphasis>on update</emphasis> triggers in the database might be "
1780
 
"executed even when no changes have been made to detached instances. You can "
1781
 
"customize this behavior by setting <literal>select-before-update=\"true\"</"
1782
 
"literal> in the <literal>&lt;class&gt;</literal> mapping, forcing Hibernate "
1783
 
"to <literal>SELECT</literal> the instance to ensure that changes did occur "
1784
 
"before updating the row."
1785
 
msgstr ""
1786
 
"Em ambos os casos, com as colunas dedicadas da versão/timestamp ou com "
1787
 
"comparação do campo cheio/modificados, o Hibernate usa uma única declaração "
1788
 
"UPDATE (com uma cláusula WHERE apropriada ) por entidade para executar a "
1789
 
"checagem da versão e atualizar a informação. Se você usa a persistência "
1790
 
"transitiva para cascatear o reatamento das entidades associadas, o Hibernate "
1791
 
"pode executar atualizações desnecessárias. Isso não é geralmente um "
1792
 
"problema, mas triggers <emphasis>on update</emphasis> em um banco de dados "
1793
 
"podem ser executados mesmo quando nenhuma mudança foi feita nas instâncias "
1794
 
"destacadas. Você pode customizar este comportamento configurando "
1795
 
"<literal>select-before-update=\"true\"</literal> no mapeamento <literal>&lt;"
1796
 
"class&gt;</literal>, forçando o Hibernate a dá um SELECT nas instâncias para "
1797
 
"assegurar-se esse as mudanças ocorreram realmente, antes de atualizar a "
1798
 
"linha."
1799
 
 
1800
 
#. Tag: title
1801
 
#: transactions.xml:858
1802
 
#, fuzzy, no-c-format
1803
 
msgid "Pessimistic locking"
1804
 
msgstr "Locking pessimista"
1805
 
 
1806
 
#. Tag: para
1807
 
#: transactions.xml:860
1808
 
#, fuzzy, no-c-format
1809
 
msgid ""
1810
 
"It is not intended that users spend much time worrying about locking "
1811
 
"strategies. It is usually enough to specify an isolation level for the JDBC "
1812
 
"connections and then simply let the database do all the work. However, "
1813
 
"advanced users may wish to obtain exclusive pessimistic locks or re-obtain "
1814
 
"locks at the start of a new transaction."
1815
 
msgstr ""
1816
 
"Não se pretende que os usuários gastam muitas horas se preocupando com suas "
1817
 
"estratégias de locking. Geralmente é o bastante para especificar um nível de "
1818
 
"isolamento para as conexões JDBC e então deixar simplesmente o banco de "
1819
 
"dados fazer todo o trabalho. Entretanto, os usuários avançados podem às "
1820
 
"vezes desejar obter locks pessimistas exclusivos, ou re-obter locks no "
1821
 
"início de uma nova transação."
1822
 
 
1823
 
#. Tag: para
1824
 
#: transactions.xml:867
1825
 
#, fuzzy, no-c-format
1826
 
msgid ""
1827
 
"Hibernate will always use the locking mechanism of the database; it never "
1828
 
"lock objects in memory."
1829
 
msgstr ""
1830
 
"O Hibernate usará sempre o mecanismo de lock da base de dados, nunca trava "
1831
 
"objetos na memória!"
1832
 
 
1833
 
#. Tag: para
1834
 
#: transactions.xml:872
1835
 
#, fuzzy, no-c-format
1836
 
msgid ""
1837
 
"The <literal>LockMode</literal> class defines the different lock levels that "
1838
 
"can be acquired by Hibernate. A lock is obtained by the following mechanisms:"
1839
 
msgstr ""
1840
 
"A classe <literal>LockMode</literal> define os diferentes níveis de lock que "
1841
 
"o Hibernate pode adquirir. Um lock é obtido pelos seguintes mecanismos:"
1842
 
 
1843
 
#. Tag: para
1844
 
#: transactions.xml:879
1845
 
#, no-c-format
1846
 
msgid ""
1847
 
"<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate "
1848
 
"updates or inserts a row."
1849
 
msgstr ""
1850
 
"<literal>LockMode.WRITE</literal> é adquirido automaticamente quando o "
1851
 
"Hibernate atualiza ou insere uma linha."
1852
 
 
1853
 
#. Tag: para
1854
 
#: transactions.xml:885
1855
 
#, fuzzy, no-c-format
1856
 
msgid ""
1857
 
"<literal>LockMode.UPGRADE</literal> can be acquired upon explicit user "
1858
 
"request using <literal>SELECT ... FOR UPDATE</literal> on databases which "
1859
 
"support that syntax."
1860
 
msgstr ""
1861
 
"<literal>LockMode.UPGRADE</literal> pode ser adquirido explicitamente pelo "
1862
 
"usuário usando <literal>SELECT ... FOR UPDATE</literal> em um banco de dados "
1863
 
"que suporte esse sintaxe."
1864
 
 
1865
 
#. Tag: para
1866
 
#: transactions.xml:891
1867
 
#, fuzzy, no-c-format
1868
 
msgid ""
1869
 
"<literal>LockMode.UPGRADE_NOWAIT</literal> can be acquired upon explicit "
1870
 
"user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under "
1871
 
"Oracle."
1872
 
msgstr ""
1873
 
"<literal>LockMode.UPGRADE_NOWAIT</literal> pode ser adquirido explicitamente "
1874
 
"pelo usuário usando <literal>SELECT ... FOR UPDATE NOWAIT</literal> no "
1875
 
"Oracle."
1876
 
 
1877
 
#. Tag: para
1878
 
#: transactions.xml:897
1879
 
#, fuzzy, no-c-format
1880
 
msgid ""
1881
 
"<literal>LockMode.READ</literal> is acquired automatically when Hibernate "
1882
 
"reads data under Repeatable Read or Serializable isolation level. It can be "
1883
 
"re-acquired by explicit user request."
1884
 
msgstr ""
1885
 
"<literal>LockMode.READ</literal> é adquirido automaticamente quando o "
1886
 
"Hibernate lê dados em um nível Repeatable Read ou Serializable isolation. "
1887
 
"Pode ser readquirido explicitamente pelo usuário."
1888
 
 
1889
 
#. Tag: para
1890
 
#: transactions.xml:904
1891
 
#, no-c-format
1892
 
msgid ""
1893
 
"<literal>LockMode.NONE</literal> represents the absence of a lock. All "
1894
 
"objects switch to this lock mode at the end of a <literal>Transaction</"
1895
 
"literal>. Objects associated with the session via a call to <literal>update()"
1896
 
"</literal> or <literal>saveOrUpdate()</literal> also start out in this lock "
1897
 
"mode."
1898
 
msgstr ""
1899
 
"<literal>LockMode.NONE</literal> representa a ausência do lock. Todos os "
1900
 
"objetos mudam para esse estado de lock no final da <literal>Transaction</"
1901
 
"literal>. Objetos associados com a sessão através do método <literal>update()"
1902
 
"</literal> ou <literal>saveOrUpdate()</literal> também são inicializados com "
1903
 
"esse lock mode."
1904
 
 
1905
 
#. Tag: para
1906
 
#: transactions.xml:913
1907
 
#, no-c-format
1908
 
msgid ""
1909
 
"The \"explicit user request\" is expressed in one of the following ways:"
1910
 
msgstr ""
1911
 
"O lock obtido \"explicitamente pelo usuário\" se dá em uma das seguintes "
1912
 
"maneiras:"
1913
 
 
1914
 
#. Tag: para
1915
 
#: transactions.xml:919
1916
 
#, no-c-format
1917
 
msgid ""
1918
 
"A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</"
1919
 
"literal>."
1920
 
msgstr ""
1921
 
"Uma chamada a <literal>Session.load()</literal>, especificando o "
1922
 
"<literal>LockMode</literal>."
1923
 
 
1924
 
#. Tag: para
1925
 
#: transactions.xml:924
1926
 
#, no-c-format
1927
 
msgid "A call to <literal>Session.lock()</literal>."
1928
 
msgstr "Uma chamada a <literal>Session.lock()</literal>."
1929
 
 
1930
 
#. Tag: para
1931
 
#: transactions.xml:929
1932
 
#, no-c-format
1933
 
msgid "A call to <literal>Query.setLockMode()</literal>."
1934
 
msgstr "Uma chamada a <literal>Query.setLockMode()</literal>."
1935
 
 
1936
 
#. Tag: para
1937
 
#: transactions.xml:935
1938
 
#, no-c-format
1939
 
msgid ""
1940
 
"If <literal>Session.load()</literal> is called with <literal>UPGRADE</"
1941
 
"literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was "
1942
 
"not yet loaded by the session, the object is loaded using "
1943
 
"<literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is "
1944
 
"called for an object that is already loaded with a less restrictive lock "
1945
 
"than the one requested, Hibernate calls <literal>lock()</literal> for that "
1946
 
"object."
1947
 
msgstr ""
1948
 
"Se uma <literal>Session.load()</literal> é invocada com <literal>UPGRADE</"
1949
 
"literal> ou <literal>UPGRADE_NOWAIT</literal>, e o objeto requisitado ainda "
1950
 
"não foi carregado pela sessão, o objeto é carregado usando "
1951
 
"<literal>SELECT ... FOR UPDATE</literal>. Se <literal>load()</literal> for "
1952
 
"chamado para um objeto que já foi carregado com um lock menos restritivo que "
1953
 
"o novo lock solicitado, o Hibernate invoca o método <literal>lock()</"
1954
 
"literal> para aquele objeto."
1955
 
 
1956
 
#. Tag: para
1957
 
#: transactions.xml:944
1958
 
#, fuzzy, no-c-format
1959
 
msgid ""
1960
 
"<literal>Session.lock()</literal> performs a version number check if the "
1961
 
"specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> "
1962
 
"or <literal>UPGRADE_NOWAIT</literal>. In the case of <literal>UPGRADE</"
1963
 
"literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR "
1964
 
"UPDATE</literal> is used."
1965
 
msgstr ""
1966
 
"O método <literal>Session.lock()</literal> executa uma verificação no número "
1967
 
"da versão se o modo de lock especificado for <literal>READ</literal>, "
1968
 
"<literal>UPGRADE</literal> ou <literal>UPGRADE_NOWAIT</literal>.. (No caso "
1969
 
"do <literal>UPGRADE</literal> ou <literal>UPGRADE_NOWAIT</literal>, é usado "
1970
 
"<literal>SELECT ... FOR UPDATE</literal>.)"
1971
 
 
1972
 
#. Tag: para
1973
 
#: transactions.xml:951
1974
 
#, fuzzy, no-c-format
1975
 
msgid ""
1976
 
"If the requested lock mode is not supported by the database, Hibernate uses "
1977
 
"an appropriate alternate mode instead of throwing an exception. This ensures "
1978
 
"that applications are portable."
1979
 
msgstr ""
1980
 
"Se o banco de dados não suportar o lock mode solicitado, o Hibernate vai "
1981
 
"usar um modo alternativo apropriado (ao invés de lançar uma exceção). Isso "
1982
 
"garante que a aplicação vai ser portável."
1983
 
 
1984
 
#. Tag: title
1985
 
#: transactions.xml:960
1986
 
#, fuzzy, no-c-format
1987
 
msgid "Connection release modes"
1988
 
msgstr "Modos de liberar a Connection"
1989
 
 
1990
 
#. Tag: para
1991
 
#: transactions.xml:962
1992
 
#, fuzzy, no-c-format
1993
 
msgid ""
1994
 
"One of the legacies of Hibernate 2.x JDBC connection management meant that a "
1995
 
"<literal>Session</literal> would obtain a connection when it was first "
1996
 
"required and then maintain that connection until the session was closed. "
1997
 
"Hibernate 3.x introduced the notion of connection release modes that would "
1998
 
"instruct a session how to handle its JDBC connections. The following "
1999
 
"discussion is pertinent only to connections provided through a configured "
2000
 
"<literal>ConnectionProvider</literal>. User-supplied connections are outside "
2001
 
"the breadth of this discussion. The different release modes are identified "
2002
 
"by the enumerated values of <literal>org.hibernate.ConnectionReleaseMode</"
2003
 
"literal>:"
2004
 
msgstr ""
2005
 
"O comportamento legado do Hibernate (2.x) em consideração ao gerenciamento "
2006
 
"da conexão via JDBC fez com que a <literal>Session</literal> precisasse "
2007
 
"obter uma conexão quando ela precisasse pela primeira vez e depois manter a "
2008
 
"conexão enquanto a sessão não fosse fechada. O Hibernate 3.x introduz a "
2009
 
"idéia de modos de liberar a sessão, para informar a sessão a forma como deve "
2010
 
"manusear a sua conexão JDBC. Veja que essa discussão só é pertinente para "
2011
 
"conexões fornecidas com um <literal>ConnectionProvider</literal> "
2012
 
"configurado; conexões fornecidas pelo usuário estão fora do escopo dessa "
2013
 
"discussão. Os diferentes modos de liberação estão definidos pelos valores da "
2014
 
"enumeração <literal>org.hibernate.ConnectionReleaseMode</literal>:"
2015
 
 
2016
 
#. Tag: para
2017
 
#: transactions.xml:976
2018
 
#, fuzzy, no-c-format
2019
 
msgid ""
2020
 
"<literal>ON_CLOSE</literal>: is the legacy behavior described above. The "
2021
 
"Hibernate session obtains a connection when it first needs to perform some "
2022
 
"JDBC access and maintains that connection until the session is closed."
2023
 
msgstr ""
2024
 
"<literal>ON_CLOSE</literal> - essencialmente é o modo legado descrito acima. "
2025
 
"A sessão do Hibernate obtêm a conexão quando precisar executar alguma "
2026
 
"operação JDBC pela primeira vez e mantem enquanto a conexão não for fechada."
2027
 
 
2028
 
#. Tag: para
2029
 
#: transactions.xml:983
2030
 
#, fuzzy, no-c-format
2031
 
msgid ""
2032
 
"<literal>AFTER_TRANSACTION</literal>: releases connections after a "
2033
 
"<literal>org.hibernate.Transaction</literal> has been completed."
2034
 
msgstr ""
2035
 
"<literal>AFTER_TRANSACTION</literal> – informa que a conexão deve ser "
2036
 
"liberada após a conclusão de uma <literal>org.hibernate.Transaction</"
2037
 
"literal>."
2038
 
 
2039
 
#. Tag: para
2040
 
#: transactions.xml:989
2041
 
#, fuzzy, no-c-format
2042
 
msgid ""
2043
 
"<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release): "
2044
 
"releases connections after every statement execution. This aggressive "
2045
 
"releasing is skipped if that statement leaves open resources associated with "
2046
 
"the given session. Currently the only situation where this occurs is through "
2047
 
"the use of <literal>org.hibernate.ScrollableResults</literal>."
2048
 
msgstr ""
2049
 
"<literal>AFTER_STATEMENT</literal> (também conhecida com liberação "
2050
 
"agressiva) – informa que a conexão deve ser liberada após a execução de cada "
2051
 
"statement. A liberação agressiva não ocorre se o statement deixa pra trás "
2052
 
"algum recurso aberto associado com a sessão obtida; atualmente, a única "
2053
 
"situação em que isso é possível é com o uso de <literal>org.hibernate."
2054
 
"ScrollableResults</literal>."
2055
 
 
2056
 
#. Tag: para
2057
 
#: transactions.xml:999
2058
 
#, fuzzy, no-c-format
2059
 
msgid ""
2060
 
"The configuration parameter <literal>hibernate.connection.release_mode</"
2061
 
"literal> is used to specify which release mode to use. The possible values "
2062
 
"are as follows:"
2063
 
msgstr ""
2064
 
"O parâmetro de configuração <literal>hibernate.connection.release_mode</"
2065
 
"literal> é usado para especificar qual modo de liberação deve ser usado. "
2066
 
"Opções disponíveis:"
2067
 
 
2068
 
#. Tag: para
2069
 
#: transactions.xml:1006
2070
 
#, fuzzy, no-c-format
2071
 
msgid ""
2072
 
"<literal>auto</literal> (the default): this choice delegates to the release "
2073
 
"mode returned by the <literal>org.hibernate.transaction.TransactionFactory."
2074
 
"getDefaultReleaseMode()</literal> method. For JTATransactionFactory, this "
2075
 
"returns ConnectionReleaseMode.AFTER_STATEMENT; for JDBCTransactionFactory, "
2076
 
"this returns ConnectionReleaseMode.AFTER_TRANSACTION. Do not change this "
2077
 
"default behavior as failures due to the value of this setting tend to "
2078
 
"indicate bugs and/or invalid assumptions in user code."
2079
 
msgstr ""
2080
 
"<literal>auto</literal> (padrão) – essa opção delega ao modo de liberação "
2081
 
"retornado pelo método <literal>org.hibernate.transaction.TransactionFactory."
2082
 
"getDefaultReleaseMode()</literal>. Para JTATransactionFactory, ele retorna "
2083
 
"ConnectionReleaseMode.AFTER_STATEMENT; para JDBCTransactionFactory, ele "
2084
 
"retorna ConnectionReleaseMode.AFTER_TRANSACTION. Raramente é uma boa idéia "
2085
 
"alterar padrão, como frequencia ao se fazer isso temos falhas que parecem "
2086
 
"bugs e/ou suposições inválidas no código do usuário."
2087
 
 
2088
 
#. Tag: para
2089
 
#: transactions.xml:1016
2090
 
#, fuzzy, no-c-format
2091
 
msgid ""
2092
 
"<literal>on_close</literal>: uses ConnectionReleaseMode.ON_CLOSE. This "
2093
 
"setting is left for backwards compatibility, but its use is discouraged."
2094
 
msgstr ""
2095
 
"<literal>on_close</literal> - indica o uso da ConnectionReleaseMode."
2096
 
"ON_CLOSE. Essa opção foi deixada para manter a compatibilidade, mas seu uso "
2097
 
"é fortemente desencorajado."
2098
 
 
2099
 
#. Tag: para
2100
 
#: transactions.xml:1022
2101
 
#, fuzzy, no-c-format
2102
 
msgid ""
2103
 
"<literal>after_transaction</literal>: uses ConnectionReleaseMode."
2104
 
"AFTER_TRANSACTION. This setting should not be used in JTA environments. Also "
2105
 
"note that with ConnectionReleaseMode.AFTER_TRANSACTION, if a session is "
2106
 
"considered to be in auto-commit mode, connections will be released as if the "
2107
 
"release mode were AFTER_STATEMENT."
2108
 
msgstr ""
2109
 
"<literal>after_transaction</literal> – indica o uso da ConnectionReleaseMode."
2110
 
"AFTER_TRANSACTION. Essa opção nada deve ser usada com ambientes JTA. Também "
2111
 
"note que no caso da ConnectionReleaseMode.AFTER_TRANSACTION, se a sessão foi "
2112
 
"colocada no modo auto-commit a conexão vai ser liberada de forma similar ao "
2113
 
"modo AFTER_STATEMENT."
2114
 
 
2115
 
#. Tag: para
2116
 
#: transactions.xml:1030
2117
 
#, fuzzy, no-c-format
2118
 
msgid ""
2119
 
"<literal>after_statement</literal>: uses ConnectionReleaseMode."
2120
 
"AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</"
2121
 
"literal> is consulted to see if it supports this setting "
2122
 
"(<literal>supportsAggressiveRelease()</literal>). If not, the release mode "
2123
 
"is reset to ConnectionReleaseMode.AFTER_TRANSACTION. This setting is only "
2124
 
"safe in environments where we can either re-acquire the same underlying JDBC "
2125
 
"connection each time you make a call into <literal>ConnectionProvider."
2126
 
"getConnection()</literal> or in auto-commit environments where it does not "
2127
 
"matter if we re-establish the same connection."
2128
 
msgstr ""
2129
 
"<literal>after_statement</literal> – indica o uso ConnectionReleaseMode."
2130
 
"AFTER_STATEMENT. Adicionalmente, o <literal>ConnectionProvider</literal> "
2131
 
"configurado é consultado para verificar se suporta essa configuração "
2132
 
"((<literal>supportsAggressiveRelease()</literal>). Se não suportar, o modo "
2133
 
"de liberação é redefinido como ConnectionRelease-Mode.AFTER_TRANSACTION. "
2134
 
"Essa configuração só é segura em ambientes onde podemos readquirir a mesma "
2135
 
"conexão JDBC toda vez que o método <literal>ConnectionProvider.getConnection"
2136
 
"()</literal> for chamado ou em um ambiente auto-commit onde não importa se "
2137
 
"nós recuperamos a mesma conexão."