Java concurrent
Este articulo se encuentra en mi nueva web:
También encontraras muchos articulos mas: mariocelis.com
Java Concurrent Program FAQ
ORACLE Java Concurrent Program en español
También encontraras muchos articulos mas: mariocelis.com
Java Concurrent Program FAQ
Como
correr un Java Concurrent Program (JCP) desde el sistema operativo?
Sintaxis:
jre
-Ddbcfile=<dbc
filename with
full
path>
[
-Drequest.logfile=<logfile
name>
]
[
-Drequest.requestid=<request
id>
]
[
-Drequest.outfile=<output
file
name>
]
[
-Drequest.userid=<user
id>
]
[
-Drequest.respappid=<resp
appl id>
]
[
-Drequest.respid=<resp
id>
]
[
-Drequest.secgrpid=<sec
grp id>
]
[
-Drequest.enabletrace=<Y/N>
]
oracle.apps.fnd.cp.request.Run
<program/class
name>
[<parameters>]
Tome
en cuenta que no hay ninguna nueva línea entre los argumentos de –D
Ejemplo:
jre
-Ddbcfile=/d2/fnd/secure/appsnode_appdb.dbc
-Dreqeust.requestid=23453
-Drequest.logfile=./myreq.log
oracle.apps.fnd.cp.request.Run
oracle.apps.wip.program.MyProg
"TOKEN1=value1:TOKEN2=value2"
Puedo
usar constructor para mi clase del programa concurrente?
Se
puede usar el constructor pero sin ningún argumento dentro.
Ejemplo:
class
MyProg implements JavaConcurrentProgram {
//
DO
NOT
USE
MyProg(String
arg1,
int
arg2...)
public
void MyProg()
{
...
}
public
void runProgram(CpContext
pCpContext)
{
....
}
}
Como pasar parámetros al programa concurrente de java?
Un JCP usa la utilidad de APIS AOL/J Parameter List para el manejo de
parámetros. Para pasar parámetros debes registrar los parámetros
con el nombre de token al momento de creación del programa
concurrente. En el JCP puedes acceder a los nombres de tokens
registrados en la API AOL/J ParameterList y obtener el
correspondiente valor para obtener el valor del parámetro.
Puedo usar diferente nombre de archivo de salida del nombre estándar?
Si se puede usar diferente nombre de archivo de salida llamando al
método setOutFile de la clase OutFile.
Que pasa si yo no llamo al método setCompletion de ReqCompletion?
El request que estés usando con este programa terminara en error.
How To Create a Java Concurrent Program?
Como
crear un programa concurrente de java?
Descripción general:
El proceso concurrente provee una interfaz JavaConcurrentProgram
con el método abstracto runProgram() al cual le pasa el
concurrente en context “CpContext”. El desarrollo del
programa implementara toda la lógica de negocios en el método
runProgram(). Que es el método principal implementado por AOL el
cual llama a runProgram() después de hacer todas las
inicializaciones requeridas para el programa concurrente incluyendo y
estableciendo la conexión a base de datos, inicializando el context
requerido y creando el archivo output de salida. CpContext tendrá
los métodos log input y output para el request específico. El
nombre de la clase con el método main serán registrados como nombre
de archivo ejecutable de java en la forma de registro de ejecutables
usando la API PL/SQL.
El desarrollador debe registrar la ruta completa del paquete para la
clase en la forma de registro de ejecutables. Por ejemplo, si el
producto wip crea una clase en:
$WIP_TOP/java/shopfloor/server/BackgroundProgram.class
entonces esta clase va al archivo apps.zip con la ubicación del
paquete:
‘oracle/apps/wip/shopfloor/server/BackgroundProgram.class’
El desarrollador registrara ‘BackgroundProgram’ como el
nombre de archivo ejecutable y ‘oracle.apps.wip.shopfloor.server’
como la ruta de paquete en la forma de registro de ejecutables.
Los parámetros del programa concurrente de java se deben registrar
con el nombre del token en la pantalla de parámetros de la forma del
registro de programas concurrentes. El desarrollador puede obtener el
valor del parámetro por el nombre del token dado en el java
concurrent program. Este nombre de token será usado para pasar los
valores de parámetros como parámetros String al Concurrent Program
desde la línea de comandos para probar el Java Concurrent Program.
El desarrollador debe establecer el texto de status y
completion para el Java Program usando el método
setCompletion() proporcionado por AOL. El método runProgram() debe
llamar al método setCompletion() para reportar el program completion
status al Concurrent Manager. El programa debe establecer este
completion status a “Normal”, “Warning” o “Error”. El
Completion text es opcional.
Pasos para escribir un Java Concurrent Program
Primero necesitas crear un directorio dentro de $FND_TOP manualmente,
ejemplo:$FND_TOP/java/cp/request entonces copiar el archivo
Template.java del siguiente bloke de codificación.
Copiar el template Java Concurrent Program a
$FND_TOP/java/cp/request/Template.java y empezar a codificar de
acuerdo a sus requerimientos. Cambiar el nombre de archivo y de clase
de su Java Concurrent Program name.
=================
Template.java===========================
package
oracle.apps.fnd.cp.request;
//
Change
the
package
name
to
the
required
one.
//
import
all
the
other required
classes/packages.
import
oracle.apps.fnd.util.*;
import
oracle.apps.fnd.cp.request.*;
//
Change
the
name
of
the
class
from
Template
to
your concurrent program
//
class
name
public
class
Template
implements JavaConcurrentProgram {
public
void runProgram(CpContext
pCpContext)
{
ReqCompletion
lRC =
pCpContext.getReqCompletion();
String
CompletionText =
"";
lRC.setCompletion(ReqCompletion.NORMAL,
CompletionText);
}
}
==================End
of
Template.java===========================
Lógica
del programa
Implemente runProgram con la lógica de negocios de su Java
Concurrent Program, runProgram() obtiene el CpContext. CpContext es
una subclase de AOL/J AppsContext la cual provee miembros de clases
especificas LogFile para escribir en request log file. OutFile para
escribir en el request output file y ReqCompletion para establecer el
completion status del request.
Parámetros
del programa
CpContext usa AOL/J utility Parameter List para pasar parámetros al
Java Concurrent Program. Refierase a AOL/J Parameter list para
obtener una lista de los nombres de parámetros, pares de valores. Te
referirás a la lista de nombres de parámetros como el nombre de
parámetro y su correspondiente valor como el valor de parámetro en
el Java Concurrent Program. Tienes que registrar los nombres de
parámetros como nombres de tokens en la pantalla de parámetros del
registro de programa concurrente.
Operaciones de base de datos
Use el metodo getJDBCConnection() para obtener el objeto de
conexión para algunas operaciones JDBC dentro del programa y libere
la conexión al pool de conexiones AppsContext. Use los métodos
CpContext commit(), rollback() para hacer commit o rollback a las
transacciones en la base de datos.
Establecer el request completion status
Llame al método setCompletion() del objeto ReqCompletion el
cual es un miembro de CpContext antes de retornar de su Java
Concurrent Program para establecer el completion status y
opcionalmente el completion text.
Registrar el ejecutable
Registre el nombre de su clase Java Concurrent Program como
execution_file_name y nombre de paquete execution_file_path en la
forma de registro de programas ejecutables.
Registrar el programa concurrente
Registre su Java Concurrent Program como programa concurrente en la
forma de registro de programas concurrentes. Registre todos los
parámetros que usted quiere pasar al programa en la pantalla de
parámetros de esta forma. Registre la lista de nombres de parámetros
referida en el programa como los nombres de tokens en la pantalla de
parámetros.
Ejemplo:
package
oracle.apps.fnd.cp.request;
import
java.io.*;
import
java.sql.*;
import
oracle.apps.fnd.util.*;
public
class
AvailableProg implements JavaConcurrentProgram {
String
applName;
public
AvailableProg()
{
//
if
no
parameter value
is
specified for
APPLNAME then
use
FND
//as
default
value
applName
=
"FND";
}
public
void runProgram(CpContext
pCpContext)
{
//
get
the
JDBC connection object
Connection
mJConn =
pCpContext.getJDBCConnection();
//
get
parameter list
object
from
CpContext
ParameterList
lPara =
pCpContext.getParameterList();
//
get
ReqCompletion object
from
CpContext
ReqCompletion
lRC =
pCpContext.getReqCompletion();
String
lQuery =
"
select substr(user_concurrent_program_name,1,70) , "
+
"
decode(enabled_flag,'Y','Enabled','N','Disabled') "
+
"
from fnd_concurrent_programs_vl cp, fnd_application_vl a "
+
"
where cp.application_id = a.application_id "
+
"
and a.application_short_name = ? "
+
"
order by 1 "
;
//
check
for
the
APPLNAME parameter token name
and
if
it there get
//
value
and
use
it as
the
application short name
in
the
query
while
(lPara.hasMoreElements())
{
NameValueType
aNVT =
lPara.nextParameter();
if
(
aNVT.getName().equals("APPLNAME")
)
applName
=
aNVT.getValue();
}
try
{
PreparedStatement
lStmt =
mJConn.prepareStatement(lQuery);
lStmt.setString(1,
applName );
ResultSet
lRs =
lStmt.executeQuery();
//
get
OutFile object
from
CpContext
OutFile
lOF =
pCpContext.getOutFile();
//
get
LogFile
object
from
CpContext
LogFile
lLF =
pCpContext.getLogFile();
lLF.writeln("Generating
Programs for Application : "
+
applName,
LogFile.STATEMENT);
lOF.writeln("
Available Concurrent Programs for Application "
+
applName);
lOF.writeln("Concurrent
Program Name Enabled");
lOF.writeln("-----------------------------------------------------------"
);
while(
lRs.next()){
lOF.writeln(lRs.getString(1)
+
"
"
+
lRs.getString(2));
}
lLF.writeln("Generated
Programs for Application : "
+
applName,
LogFile.STATEMENT);
lStmt.close();
lRC.setCompletion(ReqCompletion.NORMAL,
"Request
Completed Normal");
}
catch (SQLException
e)
{
lRC.setCompletion(ReqCompletion.ERROR,
e.toString());
}
finally
{
pCpContext.releaseJDBCConnection();
}
}
}
Ejemplo real:
Bajar las clases necesarias para compilar.
Entrar al SSH al directorio $JAVA_TOP/oracle/apps/fnd
Copiar las carpetas cp y util que son las que tienen las clases
necesarias para compilar nuestro programa.
Una vez que tenemos esas clases, las agregamos a nuestro proyecto y
empezamos a codificar nuestra clase ejecutable. La clase debe
implementar la interfaz JavaConcurrentProgram y su método
runProgram().
Cuando ya tengamos nuestra clase codificada con la estructura deseada
la subimos al servidor y la compilamos.
Después procedemos a crear el programa ejecutable en la E-Businness
Suite.
Posteriormente
el programa concurrente asociado a nuestro ejecutable.
Por
ultimo establecemos sus parámetros que sean parados como tokens al
programa concurrente de java.
Pruebas
de ejecución:
Salida
de nuestro programa.
No hay comentarios.:
Publicar un comentario