Especificación de TaskName en una unidad de persistencia JPA
Especificación de un TaskName en una unidad de persistencia Java™ Persistence API (JPA)
Acerca de esta tarea
Los TaskNames se definen en el archivo persistence.xml utilizando el nombre de propiedad
wsjpa.AccessIntent de una unidad de persistencia. El valor de la propiedad es
una lista de nombres de tarea, tipos de entidad y definiciones de intentos de acceso. En el ejemplo siguiente se muestra el contenido del nombre de propiedad wsjpa.AccessIntent
en una unidad de persistencia.
<property name = "wsjpa.AccessIntent"
value = "Tasks=' <taskName> { <entityName> ( <isolationLockValue> ) } ' "/>
A A A | | |
| | +--------- , --------+ | |
| +----------------- , -----------------+ |
+----------------------- , --------------------------+
Tasks ::= <task> [ ',' <task> ]*
<task> ::= <taskName> '{' <entity> [ ',' <entity> ]* '}'
<entity> ::= <entityName> '(' <isolationLockValues> ')'
<taskName> ::= <fully_qualified_identifier>
<entityName> ::= <fully_qualified_identifier>
<fully_qualified_identifier> ::= <identifier> [ '.' <identifier> ]*
<identifier> ::= <idStartCharacter> [ <idCharacter> ]*
<idStartCharacter> ::= Character.isJavaIdentifierStart | '?' | '*'
<idStartCharacter> ::= Character.isJavaIdentifierPart | '?' | '*'
<isolationLockValues> ::= <isolationLockValue> [ ',' <isolationLockValue> ]
<isolationLockValue> ::= <isolation> | <readLock>
<isolation> ::= "isolation" '=' <isolationValue>
<readLock> ::= "readlock" '=' <readlockValue>
<isolationValue> ::= "read-uncommitted"|"read-committed"|"repeatable-read"|"serializable"
<readlockValue> ::= "read" | "write"
Antes de establecer el TaskName en una unidad de persistencia, tenga esto en cuenta:- Los espacios en blanco se ignoran entre las señales.
- Únicamente el contenido de <isolation> y <readLock> no es sensible a mayúsculas y minúsculas.
- <TaskName> tiene el formato de un nombre de método de paquete plenamente cualificado, como com.acme.bean.MyBean.increment, o un nombre de tarea arbitrario definido por el usuario, como MyProfile.
- <entityName> tiene el formato de un nombre de clase de paquete plenamente cualificado, como com.acme.bean.Entity1.
- Se pueden utilizar los caracteres comodín '?' o '*' en <TaskName> y <entityName>. "?" busca coincidencias con cualquier carácter individual y "*" busca coincidencias con cero o más caracteres de una secuencia.
- Se permiten únicamente el aislamiento de hintNames y readLock en una definición de tarea y el orden no es significativo.
- Si readLock tiene el valor write, el aislamiento debe ser repeatable-read o serializable.
- Si readLock tiene el valor read, no tiene efecto si el aislamiento es read-uncommitted.
El siguiente ejemplo de código muestra cómo especificar un TaskName en
una unidad de persistencia JPA.
package my.company;
@Remote
class Ejb1 {
// no se asume ninguna transacción del llamante
@TransactionAttribute(Requires)
public void caller_Method1() {
// empieza una nuevo transacción implícita
// TaskName "my.company.Ejb1.caller_Method1" set on TSR
ejb1.callee_Method?();
}
@TransactionAttribute(RequiredNew)
public void callee_Method2() {
// empieza una nueva transacción implícita, es decir, TxRequiredNew.
// TaskName "my.company.Ejb1.callee_Method2" establecido en TSR
}
@TransactionAttribute(Requires)
public void callee_Method3() {
// En la transacción llamante, TaskName continúa siendo
// "my.company.Ejb1.caller_Method1"
}
@TransactionAttribute(NotSupported)
public void callee_LocalTx () {
// Transacción no especificada; se ha iniciado implícitamente una nueva transacción local.
// TaskName "my.company.Ejb1.callee_LocalTx" establecido en TSR.
}
}
Puesto que se puede utilizar un comodón para especificar TaskName y el tipo de entidad,
pueden aparecer varias coincidencias de especificación durante la ejecución.
El orden
definido en la propiedad wsjpa.AccessIntent se utilizará para buscar los nombres
de tarea y los tipos de entidad.
<properties>
<property name="wsjpa.AccessIntent" value="Tasks="
*.Task1 { *.Employee1 ( isolation=read-uncommitted ),
*.Employee? ( isolation=repeatable-read, readlock=write ),
},
* { *.Employee3 ( isolation=serializable, readlock=write ) },
'" />
</properties>