|
Oracle Fusion Middleware Java API Reference for Oracle ADF Model 11g Release 1 (11.1.1.4.0) E10653-05 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object oracle.jbo.common.PropertiesHelper oracle.jbo.client.remote.ComponentHintsHelper oracle.jbo.client.remote.ApplicationModuleImpl
public class ApplicationModuleImpl
Abstract application module proxy. Defines the platfrom independent remote interface for concrete (platform dependent) subclasses.
Field Summary | |
---|---|
protected boolean |
mRemoved
|
Fields inherited from class oracle.jbo.common.PropertiesHelper |
---|
mProperties |
Fields inherited from interface oracle.jbo.GenericHints |
---|
PROPERTY_LABEL, PROPERTY_LABEL_PLURAL, PROPERTY_TOOLTIP |
Fields inherited from interface oracle.jbo.Transaction |
---|
DML_OPERATION_TIMEOUT_WAIT_FOREVER, LOCK_NONE, LOCK_OPTIMISTIC, LOCK_OPTUPDATE, LOCK_PESSIMISTIC |
Fields inherited from interface oracle.jbo.Session |
---|
JBO_SESSION_COOKIE, JBO_SESSION_LOCALE |
Fields inherited from interface oracle.jbo.common.ws.WSApplicationModuleMarshaller |
---|
ACTIVATION_AFTER_LOSS_OF_AFFINITY, ACTIVATION_AFTER_RESTART, ACTIVATION_NONE, SYNC_INT_BATCH, SYNC_INT_BATCH_DO_WORK |
Constructor Summary | |
---|---|
ApplicationModuleImpl()
|
Method Summary | |
---|---|
byte[] |
activateState(int id,
boolean remove)
|
byte[] |
activateState(int id,
boolean remove,
SessionData info)
|
byte[] |
activateState(int id,
SessionData info,
int flags)
Internal: Applications should not use this method. |
byte[] |
activateStateForUndo(java.lang.String id,
int flags)
Restore an application module undo record. |
void |
addClientPostListener(ClientPostListener l)
|
void |
addResponse(java.io.Serializable res)
|
void |
addTransactionStateListener(TransactionStateListener target)
Add this TransactionListener to the list and notify all such listeners whenever commit and rollback occurs in this transaction. |
void |
addViewClearCacheListener(ViewClearCacheListener target)
|
void |
addWarning(JboWarning warn)
Override from WarningContainer |
void |
afterActivation(int activationMode)
|
void |
applyChangeSet(int id)
Applies the changes committed by another transaction in order to synchronize caches between root Application Module instances. |
void |
beforePassivateState()
|
void |
bindToWorkingSet(WSApplicationModuleImpl wsAM)
|
java.lang.Object[] |
buildViewCriteriaClauses(int voId,
boolean forQuery,
ViewCriteria viewCrit)
|
boolean |
cancelDMLOperations()
Cancels the currently running Entity Object DML operations. |
void |
clearEntityCache(java.lang.String entityName)
Clears the cache of the specified Entity Object. |
void |
clearVOCaches(java.lang.String entityName,
boolean recurse)
Clears the view object cache for all view objects that use an entity object identified by entityName . |
void |
closeLob(int rsId,
int rowId,
java.lang.String attrId,
boolean forInput,
boolean isCharStream)
|
void |
commit()
Execute a commit of the server to the database. |
int |
commitAndSaveChangeSet()
Commits the transaction and writes updated EntityImpls to the persistent store. |
void |
connect(java.lang.String url)
Make a physical connection to a database server. |
void |
connect(java.lang.String url,
java.util.Properties info)
Make a physical connection to a database server. |
void |
connect(java.lang.String url,
java.lang.String user,
java.lang.String password)
Make a physical connection to a database server. |
void |
connectToDataSource(java.util.Hashtable initialContextEnv,
java.lang.String dataSourceName,
boolean isXABased)
Looks up a datasource from a jndi tree and acquires the jdbc connection from the looked up datasource using the javax.sql.Datasource.getConnection(String user, String passwd) method. |
void |
connectToDataSource(java.util.Hashtable initialContextEnv,
java.lang.String dataSourceName,
java.lang.String user,
java.lang.String passwd,
boolean isXABased)
Looks up a datasource from a jndi tree and acquires the jdbc connection from the looked up datasource using the javax.sql.Datasource.getConnection(String user, String passwd) method. |
void |
connectToDataSource(java.lang.String nsUrl,
java.lang.String nsUser,
java.lang.String nsPasswd,
java.lang.String dataSourceName)
Looks up a datasource from Oracle 8i namespace using the jdbc_access protocol and acquires the default jdbc connection from the looked up datasource using the javax.sql.Datasource.getConnection() method. |
void |
connectToDataSource(java.lang.String nsUrl,
java.lang.String nsUser,
java.lang.String nsPasswd,
java.lang.String dataSourceName,
java.lang.String user,
java.lang.String password)
Looks up a datasource from Oracle 8i namespace using the jdbc_access protocol and acquires the jdbc connection from the looked up datasource using the javax.sql.Datasource.getConnection(String user, String password) method. |
ApplicationModule |
createApplicationModule(java.lang.String amName,
java.lang.String defName)
Create a ApplicationModule using its class name and specify its name |
ComponentObject |
createComponentObject(java.lang.String coName,
java.lang.String cDefName)
Create a ComponentUsage using the name of a ComponentObject class. |
ViewDef |
createCompositeViewDef(java.lang.String name,
java.lang.String fullName)
|
protected RowSet |
createDetailRowSet(int rsiId,
java.lang.String rsName,
java.lang.String vlDefName)
Create a detail RowSet (ViewObject) using the name of a ViewObject class. |
static ApplicationModuleImpl |
createInstance(ResponseValues amInfo)
|
protected ApplicationModuleImpl |
createProxyApplicationModule(ResponseValues handle)
|
java.lang.Object |
createRef(java.lang.String structName,
byte[] data)
Internal: Applications should not use this method. |
ViewLink |
createViewLink(java.lang.String viewLinkName,
java.lang.String viewLinkDefName,
ViewObject master,
ViewObject detail)
Creates a view link in this application module from the view link definition. |
ViewLink |
createViewLinkBetweenViewObjects(java.lang.String viewLinkName,
java.lang.String accessorName,
ViewObject master,
AttributeDef[] srcAttrs,
ViewObject detail,
AttributeDef[] destAttrs,
java.lang.String assocClause)
Creates a view link in this application module. |
ViewLink |
createViewLinkFromEntityAssocName(java.lang.String viewLinkName,
java.lang.String entityAssocName,
ViewObject master,
ViewObject detail)
Creates a view link in this application module from an entity association. |
ViewObject |
createViewObject(java.lang.String voName,
java.lang.String vDefName)
Create a ViewUsage using the name of a ViewObject class. |
ViewObject |
createViewObjectFromQueryClauses(java.lang.String voName,
java.lang.String eoName,
java.lang.String selectClause,
java.lang.String fromClause,
java.lang.String whereClause,
java.lang.String orderByClause)
Creates a view object in this application module from an entity Object and additional SQL clauses. |
ViewObject |
createViewObjectFromQueryStmt(java.lang.String voName,
java.lang.String sqlStatement)
Create a ViewUsage using a SQL statement. |
ViewObject |
createViewObjectFromQueryStmt(java.lang.String voName,
java.lang.String sqlStatement,
java.lang.String voImplClass)
Create a ViewUsage using a SQL statement. |
ViewObject |
createViewObjectOnEntity(java.lang.String voName,
java.lang.String eoName)
|
ViewObject |
createViewObjectOnRowSet(java.lang.String voName,
RowSet rs)
|
ApplicationModule |
createWorkerApplicationModule(java.lang.Object sessionCookie)
|
RowSet |
deepCopy(int rsId,
java.util.HashMap map,
long options)
|
void |
detach()
|
void |
disconnect()
Performe clean-up when client is disconnecting by dereferencing the remote instances. |
void |
disconnect(boolean retainState)
Closes the JDBC connection object. |
ServiceMessage |
doMessage(ServiceMessage svcMsg)
|
ApplicationPoolSvcMsgContext |
doPoolMessage(ApplicationPoolSvcMsgContext ctx)
Internal use only. |
void |
doPostChanges()
|
java.lang.String |
dumpQueryResult(java.lang.String query,
java.lang.String dumpClassName,
java.lang.String[] data)
Writes the result of the query to a (potentially very long) string. |
int |
executeCommand(java.lang.String command)
Executes a SQL command using a JDBC Statement under the current transaction. |
RowSet |
executeQueryOnViewObjects(java.lang.String query)
|
void |
fetchAttributeProperties(java.lang.String[] voNames,
java.lang.String[][] attrNames,
LocaleContext locale)
Fetches all custom properties for the given list of attributes for the named view objects in this application module over to the remote client objects in one network roundtrip. |
java.lang.Object |
fetchEvaluatedRowAttributeProperty(RowImpl row,
java.lang.String attr,
java.lang.String prop,
LocaleContext locale)
|
java.util.Hashtable[] |
fetchRowAttributeProperties(int rsId,
RowImpl row,
java.lang.String[] attrNames,
LocaleContext locale)
|
ApplicationModule |
findApplicationModule(java.lang.String amName)
Get an ApplicationModule using its name. |
ComponentObject |
findComponentObject(java.lang.String coName)
Finds the named component object. |
OperationDefinitions |
findOperationDefinitions()
|
OperationDefinitions |
findOperationDefinitions(int id)
|
DataCollector |
findOrCreateDataCollector(java.lang.Object obj)
|
RowSetIterator |
findRSIForEntity(RowSetIterator[] rsis,
int eRowHandle)
Finds the RowSetIterator associated with the
specified entity row handle. |
ApplicationModule |
findSharedApplicationModule(java.lang.String appModuleName)
INTERNAL: Applications should not use. |
ViewLink |
findViewLink(java.lang.String viewLinkName)
Finds the named view link. |
ViewObject |
findViewObject(java.lang.String voName)
Finds the named view object. |
ViewObject |
findViewObjectUsingEntity(ViewObject[] vos,
java.lang.String entityDefName,
java.lang.String[] attrNames)
Given an array of view objects (the vos parameter), finds the first matching view object. |
ViewObject |
findViewObjectWithParameters(java.lang.String voName,
VariableManager params,
boolean executeIfNeeded)
Internal: Applications should not use this method. Given a view object name, use findViewObject(String name) to find the view object and set it's named bind parameters with the values passed in the 'params' argument. |
void |
finishedPiggybacking()
|
void |
finishedProcessingPiggyback(java.lang.Exception[] exArr)
|
void |
finishSyncWorkingSet(WSApplicationModuleImpl wsAM,
boolean isEndOfSvcMsg)
|
java.lang.String[] |
getAllApplicationModuleDefNames()
Return the name of the ApplicationModule class and all the nested ApplicationModule |
java.lang.String[] |
getAllEntityAssociationDefNames()
Gets the names of the entity association definitions defined in all packages. |
java.lang.String[] |
getAllEntityDefNames()
Return the names of the EntityObject available in all nested packages. |
java.lang.String[] |
getAllViewDefNames()
Return the names of the ViewObject available in all nested packages. |
java.lang.String[] |
getAllViewLinkDefNames()
Gets the names of the View Link definitions defined in all packages. |
protected ResponseValues |
getAMFullRef(ResponseValues handle)
|
java.lang.String[] |
getApplicationModuleDefNames(java.lang.String packName)
Return the names of the ApplicationModule class. |
java.lang.String[] |
getApplicationModuleNames()
Return the names of the ApplicationModules. |
java.lang.String[] |
getApplicationModuleNames(boolean inclLoadedOnes,
boolean inclNotLoadedOnes)
Returns an array of names of the nested application modules in this application module. |
AppModuleRequestHandler |
getAppModuleRequestHandler()
|
java.lang.Object[] |
getAttributeSecurityHints(RowImpl row,
java.lang.String operName,
java.lang.String attrName)
|
java.lang.String |
getClientProxyInterfaceName()
|
ConnectionMetadata |
getConnectionMetadata()
Returns a metdata structure that describes the transaction's JDBC connection. |
WSApplicationModuleImpl |
getCurrentWorkingSet()
|
java.lang.String |
getDefFullName()
Retrieve the application module definition's full name. |
java.lang.String |
getDefName()
Retrieve the application module definition name. |
protected RowSet[] |
getDetailRowSets(int rsiId)
|
int |
getDMLOperationTimeOut()
Returns the current Entity Object DML operation time out value. |
java.lang.Object |
getDomainValue(java.lang.String className,
java.lang.String[] argTypes,
java.lang.Object[] argValues)
|
java.lang.String[] |
getEntityAssociationDefNames(java.lang.String packName)
Gets the names of the entity association definitions defined in a package. |
java.lang.String[] |
getEntityDefNames(java.lang.String packName)
Return the names of the EntityObject available in the root package. |
java.util.Hashtable |
getEnvironment()
Returns the BC4J context for the session. |
long |
getEstimatedRowCount(int rsId,
long cap,
boolean deferred,
boolean isCapped)
|
JboExceptionHandler |
getExceptionHandler()
|
int |
getFetchedRowCount(int rsiId)
|
java.lang.String |
getFullName()
Retrieves the fully-qualified name of this component. |
java.lang.String |
getImageLoc(boolean bOpen)
|
int |
getIterMode(int rsiId)
|
java.lang.String |
getLabel(LocaleContext locale)
Retrieves the label to be used in any attribute prompts |
java.lang.String |
getListBindingName(RowSetIterator rsi,
Key rowKey,
java.lang.String attrName,
java.lang.String lbName)
|
RowSetIterator |
getListBindingRSI(RowSetIterator rsi,
Key rowKey,
java.lang.String attrName,
java.lang.String lbName)
|
java.util.Locale |
getLocale()
Get the current Locale |
LocaleContext |
getLocaleContext()
retrieves the locale context for the session |
int |
getLockingMode()
Returns the preferred locking mode for this Transaction. |
java.lang.String |
getMarshalledTypeName(java.lang.Object obj)
|
int |
getMaxFetchSize(int voId)
|
int |
getMostRecentStackId()
Internal: Applications should not use this method. |
java.lang.String |
getName()
Retrieve the name of the particular instance of an object (instance name) |
ObjectMarshaller |
getObjectMarshaller()
|
java.lang.String[] |
getPackageNames()
Gets names of the packages that make up this middle tier application. |
java.lang.Object |
getParent()
|
protected byte[] |
getPiggyback()
|
RowSetIterator |
getPreferredListRSI(RowSetIterator rsi,
Key rowKey,
java.lang.String attrName,
java.lang.String lbName)
|
java.util.Hashtable |
getProperties()
Gets the table of properties. |
java.lang.String |
getQueryOptimizerHint(int voId)
|
int |
getReleaseLevel()
Returns the release level that should be employed by clients of this application module. |
AbstractAppModuleRequestHandler |
getRemoteAppModuleRequestHandler()
|
int |
getRemoteId()
|
int |
getRemoteObjectId(java.lang.Object obj)
|
java.lang.String |
getResponseName()
|
ApplicationModuleImpl |
getRootAM()
|
byte |
getROTEntryType()
|
int |
getRowCount(int rsId)
|
java.lang.Object[] |
getRowSecurityHints(RowImpl row,
java.lang.String operName)
|
protected RowSetIterator[] |
getRowSetIterators(int rsId)
|
protected RowSet[] |
getRowSets(int voId)
|
protected ServiceMessage |
getServiceMessage()
|
Session |
getSession()
Gets the application module's session. |
ClientDocument |
getStyles(java.lang.String name)
Gets the Style Definitions from the Middle Tier |
java.lang.Object |
getSyncLock()
Gets the locking object for this application module. |
int |
getSyncMode()
Returns the sync mode for this application module. |
Transaction |
getTransaction()
Gets this application module's database transaction. |
java.util.Hashtable |
getUserData()
Returns application context for the session. |
java.lang.String[] |
getUserRoles()
Returns the Roles/Groups for current user principal. |
java.lang.String |
getVersion()
Get the version |
java.lang.String[] |
getViewDefNames(java.lang.String packName)
Return the names of the ViewObject available in the root package. |
java.lang.String[] |
getViewLinkDefNames(java.lang.String packName)
Gets the names of the View Link definitions defined in a package. |
java.lang.String[] |
getViewLinkNames()
Returns an array of the names of the view links that are currently loaded within this application module. |
java.lang.String[] |
getViewLinkNames(boolean inclLoadedOnes,
boolean inclNotLoadedOnes)
Returns an array of names of the view links in this application module. |
protected int |
getViewObjectId(ViewObject vo)
|
java.lang.String[] |
getViewObjectNames()
Return the names of the ViewUsages (static and dynamic) defined in this applicationModule. |
java.lang.String[] |
getViewObjectNames(boolean inclLoadedOnes,
boolean inclNotLoadedOnes)
Returns an array of names of the view objects in this application module. |
void |
handleException(java.lang.Exception ex,
boolean lastEntryInPiggyback)
Catches an exception thrown by the middle tier. |
void |
handleWarning(JboWarning warn)
Catches a warning thrown by the middle tier. |
boolean |
hasPendingDataPosts()
|
protected void |
init()
|
protected void |
init(java.util.Hashtable env)
|
void |
invalidateSession()
INTERNAL: Applications should not use. |
java.lang.Object |
invokeDomainMethod(Row row,
java.lang.String attrId,
boolean bringBackDomain,
java.lang.String methodName,
java.lang.String[] clzNames,
java.lang.Object[] args)
|
java.lang.Object |
invokeMethod(java.lang.Object target,
java.lang.String methodName,
java.lang.String[] argTypeNames,
java.lang.Object[] args)
|
boolean |
isBoundToWorkingSet()
|
boolean |
isBundledExceptionMode()
|
boolean |
isClearCacheOnCommit()
Returns the flag indicating whether all Entity Object caches will be cleared after the transaction is committed. |
boolean |
isClearCacheOnRollback()
Returns the flag indicating whether all Entity Object caches will be cleared after the transaction is rolled back. |
boolean |
isClient()
Returns whether this session is running as a client in 3 tier or not. |
boolean |
isConnected()
Checks if the transaction is connected to the database. |
boolean |
isCustomMarshalled(java.lang.Object obj)
|
boolean |
isDetached()
|
boolean |
isDirty()
Checks if any data within this Application Module has been modified but not yet committed. |
protected static boolean |
isEmpty(java.lang.String s)
|
static boolean |
isIgnoreCustomProxies()
|
boolean |
isInWorkingSet()
|
boolean |
isLocal()
|
boolean |
isMarshalledLocally()
|
boolean |
isRemoved()
|
boolean |
isRoot()
Returns true if this application module is a root application module. |
boolean |
isRowValidation(int rsiId)
|
boolean |
isUserInRole(java.lang.String role)
|
boolean |
isValidIdForUndo(java.lang.String id)
Determines if an id created using ApplicationModule.passivateStateForUndo(String, byte[], int)
is still valid. |
void |
loadPackage(java.lang.String packageName)
Loads a package that may be browsed for defined objects. |
java.lang.Object |
marshal(java.lang.Object obj)
|
java.lang.Object |
marshalForActivate(java.lang.Object obj)
|
int |
passivateState(byte[] clientData)
|
int |
passivateState(byte[] clientData,
int flags)
Internal: Applications should not use this method. |
int |
passivateState(int id,
byte[] clientData)
Internal: Applications should not user this method. |
int |
passivateState(int id,
byte[] clientData,
int flags)
Internal: Applications should not use this method. |
java.lang.String |
passivateStateForUndo(java.lang.String id,
byte[] clientData,
int flags)
Create an application module undo record. |
void |
postChanges()
Synchronizes the changes in the middle-tier transaction-cache with the database. |
void |
prepareSession(SessionData info)
Internal: Applications should not use this method. |
void |
prepareViewObjects(java.lang.String[] voNames,
java.lang.String[][] voAttrNames,
LocaleContext locale)
Prepares view objects for execution. |
void |
processChangeNotifications()
|
void |
processJboException(JboException ex)
|
protected void |
processPiggyback(byte[] pb)
|
protected java.util.ArrayList |
processServiceMessage(ServiceMessage svcMsg,
boolean isRemarshal)
|
ResponseValues |
readBlobStream(int rsId,
int rowId,
java.lang.String attrId,
int offset,
int length)
|
ResponseValues |
readLob(int rsId,
int rowId,
java.lang.String attrId,
int offset,
int length)
|
ResponseValues |
readLobInternal(int rsId,
int rowId,
java.lang.String attrId,
int offset,
int length,
boolean isCharStream)
|
protected java.lang.Object |
readMethodResponse(java.lang.String methodName,
ServiceMessage sm)
|
void |
readRowSetXML(int rsId,
Element elem,
int depthCount)
|
void |
readRowXML(int rsiId,
RowImpl row,
Element elem,
int depthCount)
|
void |
reconnect()
Re-establish the transaction JDBC connection using previously supplied database credentials. |
void |
reconnect(boolean force)
Reconnect the application module to the database, if necessary, using previously supplied database credentials. |
java.util.Hashtable |
refreshProperties()
Override PropertyHelper.getProperties |
java.lang.Object |
refreshProperty(java.lang.String hintName)
Retrieves the specified property, if it exists. |
java.lang.Object |
refreshVOProperty(int voId,
java.lang.String hintName)
|
ViewDefInfo |
registerViewDefObject(ClientViewDef cliViewDef)
|
void |
remove()
Deletes this component. |
void |
removeChangeSet(int id)
Removes the change set that defines the changes to EntityImpls within a transaction. |
void |
removeClientPostListener(ClientPostListener l)
|
void |
removeState(int id)
Internal: Applications should not use this method. |
void |
removeTransactionStateListener(TransactionStateListener target)
Remove this transaction listener (if it exists) from this transaction. |
void |
removeViewClearCacheListener(ViewClearCacheListener target)
|
int |
reservePassivationId()
Internal: Applications should not user this method. |
int |
reserveSnapshotId(int flags)
Internal: Applications should not use this method. |
void |
resetMarshaller()
|
void |
resetState(boolean reload)
|
void |
resetState(int flags)
Advanced use only |
ResponseValues |
riGetApplicationModuleInfo()
|
java.lang.Object |
riInvokeExportedMethod(java.lang.Object target,
java.lang.String methodName,
java.lang.String[] argTypes,
java.lang.Object[] args)
|
void |
riRemove()
|
void |
rollback()
Discards all modifications made in this transaction. |
ViewDefInfo |
saveViewDefObject(ClientViewDef cliViewDef)
|
ServiceMessage |
sendServiceMessage(ServiceMessage svcMsgIn)
Sends a service message to SvcMsgReceiver . |
ServiceMessage |
sendWorkingSetRequests(java.lang.String reqName,
WSApplicationModuleImpl wsAM,
ServiceMessage msg)
|
void |
setBoundToWorkingSet(boolean b)
|
void |
setBundledExceptionMode(boolean flag)
Set this transaction into bundled exception mode. |
void |
setClearCacheOnCommit(boolean val)
Sets the value of the flag indicating whether all Entity Object caches will be cleared after the transaction is committed. |
void |
setClearCacheOnRollback(boolean val)
Sets the value of the flag indicating whether all Entity Object caches will be cleared after the transaction is rolled back. |
void |
setDataModelRefresh(boolean b)
|
void |
setDMLOperationTimeOut(int timeOutMills)
Sets the query time out value for the Entity Object's DML operations. |
void |
setExceptionHandler(JboExceptionHandler hndlr)
Sets the exception handler for this application module. |
static void |
setIgnoreCustomProxies(boolean ignore)
|
void |
setIterMode(int rsiId,
int mode)
|
void |
setLocale(java.util.Locale locale)
Set a new Locale |
void |
setLockingMode(int mode)
Sets the preferred locking mode for this Transaction. |
void |
setMaxFetchSize(int voId,
int max)
|
void |
setProperty(java.lang.String hintName,
java.lang.Object hintValue)
|
void |
setQueryOptimizerHint(int voId,
java.lang.String hint)
|
void |
setReleaseLevel(int releaseLevel)
|
void |
setRemoteAppModuleRequestHandler(AbstractAppModuleRequestHandler reqHandler)
|
void |
setRowValidation(int rsiId,
boolean flag)
|
void |
setStoreForPassiveState(byte storageType)
Internal: Applications should not use this method. |
void |
setStyles(java.lang.String name,
ClientDocument clientDocument)
Saves the Style Definitions to the Middle Tier |
void |
setSyncMode(int mode)
Sets the data synchronization mode between the client and the middle tier. |
void |
setVOProperty(int voId,
java.lang.String attrName,
java.lang.String hintName,
java.lang.Object hintValue)
|
void |
sync()
Synchronise all the ResultSets defined in this ApplicationModule with the server. |
void |
syncMarshaller(ServiceMessage svcMsg)
|
void |
syncWorkingSet(WSApplicationModuleImpl wsAM)
|
protected java.lang.String |
toEmpty(java.lang.String s)
|
java.lang.Object[] |
transformExceptionParams(ViewObject[] vos,
java.lang.String entityDefName,
java.lang.String className,
java.lang.Object[] params)
Internal: Applications should not use this method. This method uses findViewObjectUsingEntity() to get the first view object that this entity is used in and then transforms the parameters from a given JboException from their entity layer equivalents to the view object equivalents. |
void |
transPostPushback(int hdl)
Internal: Applications should not use this method. |
void |
transPostRefresh(int refreshMode,
int hdl)
|
void |
transPostRemove(int hdl)
Internal: Applications should not use this method. |
void |
transPostRevert(int hdl)
Internal: Applications should not use this method. |
java.lang.Object |
unMarshal(java.lang.Object obj)
|
void |
validate()
Starts the validation cycle and validates all subscribers in the ValidationListener list. |
void |
writeClob(int rsId,
int rowId,
java.lang.String attrId,
char[] data)
|
void |
writeLob(int rsId,
int rowId,
java.lang.String attrId,
byte[] data)
|
Node |
writeRowSetXML(int rsId,
int depthCount,
long options)
|
Node |
writeRowSetXMLWithMap(int rsId,
long options,
java.util.HashMap map)
|
Node |
writeRowXML(int rsiId,
RowImpl row,
int depthCount,
long options)
|
Node |
writeRowXMLWithMap(int rsiId,
RowImpl row,
long options,
java.util.HashMap map)
|
Methods inherited from class oracle.jbo.client.remote.ComponentHintsHelper |
---|
getHintValue, getLabelPlural, getTooltip |
Methods inherited from class oracle.jbo.common.PropertiesHelper |
---|
closeObject, getProperty, getProperty, isReadOnly, setName |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface oracle.jbo.GenericHints |
---|
getHintValue, getLabelPlural, getTooltip |
Methods inherited from interface oracle.jbo.Properties |
---|
getProperty, getProperty |
Field Detail |
---|
protected boolean mRemoved
Constructor Detail |
---|
public ApplicationModuleImpl()
Method Detail |
---|
public void setRemoteAppModuleRequestHandler(AbstractAppModuleRequestHandler reqHandler)
public AbstractAppModuleRequestHandler getRemoteAppModuleRequestHandler()
protected void init()
protected void init(java.util.Hashtable env)
public boolean isRemoved()
public boolean isLocal()
isLocal
in interface AppModuleRequestHandler
protected static boolean isEmpty(java.lang.String s)
public final java.lang.Object getSyncLock()
ApplicationModule
This locking object should be used to synchronize multiple calls into BC4J. The client application code rarely needs to worry about synchronization. It is the middle tier (the server) code that needs to synchronize calls into the middle tier to serialize updates to shared middle tier objects.
Here is an example of how to synchronize access using this method:
synchronized(am.getSyncLock()) { // Code that needs to execute serially. }
getSyncLock
in interface ApplicationModule
public ApplicationModuleImpl getRootAM()
public java.lang.Object getParent()
getParent
in interface ClientComponentObject
public java.lang.String getLabel(LocaleContext locale)
GenericHints
getLabel
in interface GenericHints
getLabel
in class ComponentHintsHelper
public java.lang.String[] getPackageNames()
Session
getPackageNames
in interface Session
public ApplicationModule createApplicationModule(java.lang.String amName, java.lang.String defName)
createApplicationModule
in interface ApplicationModule
amName
- The name to assign to the ApplicationModuledefName
- The name of the ApplicationModule class
public ApplicationModule findApplicationModule(java.lang.String amName)
findApplicationModule
in interface ApplicationModule
amName
- The name of the ApplicationModule
public java.lang.String[] getApplicationModuleDefNames(java.lang.String packName)
getApplicationModuleDefNames
in interface Session
packName
- the name of the package.
public java.lang.String[] getAllApplicationModuleDefNames()
getAllApplicationModuleDefNames
in interface Session
public java.lang.String[] getApplicationModuleNames()
getApplicationModuleNames
in interface ApplicationModule
ApplicationModule.findApplicationModule(String)
public java.lang.String[] getApplicationModuleNames(boolean inclLoadedOnes, boolean inclNotLoadedOnes)
ApplicationModule
This method allows the user to control whether the returning names are those of loaded (instantiated) nested application modules, or those of not yet loaded (uninstantiated) nested application modules, or both. Not yet loaded application modules would appear only if lazy loading is turned on.
Note that
is equivalent
to ApplicationModule.getApplicationModuleNames()
getApplicationModuleNames(true, false)
.
If this method is called with loadedOnes = true
and
fromDef = true
, both loaded and not-yet-loaded
application module names are returned. No duplicate name is returned.
Note that loaded application modules include dynamically created ones.
getApplicationModuleNames
in interface ApplicationModule
inclLoadedOnes
- if true
, loaded ones are
returned.inclNotLoadedOnes
- if true
, names of the child application modules from the
application module definition are returned. Some of
these child AMs could have already been loaded and some may
have not yet been loaded.
public void connect(java.lang.String url)
connect
in interface Transaction
url
- a database url of the form jdbc:subprotocol:subname.public void connect(java.lang.String url, java.util.Properties info)
connect
in interface Transaction
url
- a database url of the form jdbc:subprotocol:subname.info
- a list of arbitrary string tag/value pairs to be used as
connection arguments. Normally, at least "user" and
"password" properties should be included.public void connect(java.lang.String url, java.lang.String user, java.lang.String password)
connect
in interface Transaction
url
- a database url of the form jdbc:subprotocol:subname.user
- the database user on whose behalf the connection is being made.password
- the user's password.public void connectToDataSource(java.lang.String nsUrl, java.lang.String nsUser, java.lang.String nsPasswd, java.lang.String dataSourceName)
Transaction
connectToDataSource
in interface Transaction
nsUrl
- Url to the jndi namespace where the datasource is boundnsUser
- User name that is used to access the namespace.nsPasswd
- nsUsers' passwddataSourceName
- Datasource name as bound in the namespace.
Name can be the fully qaultified url such as
jdbc_access://test/ds/db1 otherwise the
the url prefix jdbc_acess:// is prepended to the
datasource name for lookup.public void connectToDataSource(java.lang.String nsUrl, java.lang.String nsUser, java.lang.String nsPasswd, java.lang.String dataSourceName, java.lang.String user, java.lang.String password)
Transaction
connectToDataSource
in interface Transaction
nsUrl
- Url to the jndi namespace where the datasource is boundnsUser
- User name that is used to access the namespace.nsPasswd
- nsUsers' passwddataSourceName
- Datasource name as bound in the namespace.
Name can be the fully qaultified url such as
jdbc_access://test/ds/db1 otherwise the
the url prefix jdbc_acess:// is prepended to the
datasource name for lookup.user
- Username for which the connection is acquired from the datasourcepassword
- User's password.public void connectToDataSource(java.util.Hashtable initialContextEnv, java.lang.String dataSourceName, java.lang.String user, java.lang.String passwd, boolean isXABased)
Transaction
connectToDataSource
in interface Transaction
initialContextEnv
- Envirionment used the create initial context.
May be null.dataSourceName
- Datasource name as bound in the namespace.user
- Username for which the connection is acquired from the datasourcepasswd
- User's password.isXABased
- True if datasource is XADataSource implementation.
If true, the tranasction is assumed to be controlled
by an external transaction manager.public void connectToDataSource(java.util.Hashtable initialContextEnv, java.lang.String dataSourceName, boolean isXABased)
Transaction
connectToDataSource
in interface Transaction
initialContextEnv
- Envirionment used the create initial context.
May be null.dataSourceName
- Datasource name as bound in the namespace.isXABased
- True if datasource is XADataSource implementation.
If true, the tranasction is assumed to be controlled
by an external transaction manager.public ConnectionMetadata getConnectionMetadata()
Transaction
getConnectionMetadata
in interface Transaction
public boolean isConnected()
Transaction
isConnected
in interface Transaction
public void reconnect(boolean force)
Transaction
reconnect
in interface Transaction
force
- force a reconnect, should usually be false.public void reconnect()
Transaction
If the application module was previously disconnected using disconnect(true) (retain application module state) then this method should only re-establish the transaction JDBC connection.
If the application module was previously disconnected using disconnect(false) (do not retain application module state) then this method should re-establish the transaction JDBC connection and reset the application module non-transactional state which may include child view usage and application module usage instances.
reconnect
in interface Transaction
public void disconnect()
disconnect
in interface Transaction
public void disconnect(boolean retainState)
Transaction
If disconnect is invoked with retainState equal to true then this
transaction's JDBC connection will be closed but, the root application
module will continue to reference this transaction and its state. The
transaction state may include unposted database changes and cached result
sets. In the middle tier, reconnect
on the DBTransaction
interface
may be invoked to re-establish a JDBC connection for this transaction. If
connection pooling is enabled for this middle tier instance this
connection may represent a recycled connection.
The developer should take measures to ensure that the following requirements are met before attempting to disconnect a JDBC connection and retain application module state. All of these validations are not currently performed by the disconnection implementation because of performance considerations:
All non-forward only view objects should have fetched in all data
If pessimistic locking is enabled, all pending changes should be commited/rolled back.
All changes that have been posted to the database should be commited/rolled back.
disconnect
in interface Transaction
public void validate()
Transaction
ValidationListener
list.
Typically
all top-level entities which were invalidated through the framework will
be in this list. Listeners are removed as they are validated.
The advantage of calling validate() is that the data stays in the middle tier. Data is not posted to the database, thus avoiding the possible firing of database triggers or constraints.
validate
in interface Transaction
public void addClientPostListener(ClientPostListener l)
public void removeClientPostListener(ClientPostListener l)
public void postChanges()
Transaction
This method bypasses the validation cycle and can allow invalid data to be posted to the database. As a side effect of this method, database triggers or other constraints might be fired as a result of posting data. However, invalid changes cannot be committed, as the commit() method validates all changes before committing them.
Typically, applications should call this method if they must execute SQL operations or queries with the current cached-state of data, before validating the changes.
postChanges
in interface Transaction
Transaction.commit()
public void doPostChanges()
public void transPostPushback(int hdl)
TransPostControl
transPostPushback
in interface TransPostControl
public void transPostRemove(int hdl)
TransPostControl
transPostRemove
in interface TransPostControl
public void transPostRevert(int hdl)
TransPostControl
transPostRevert
in interface TransPostControl
public void transPostRefresh(int refreshMode, int hdl)
transPostRefresh
in interface TransPostControl
public boolean isDirty()
Transaction
For example, this method can be called when the user at the client attempts to close an application. If there is unsaved data, this method can return true. In response, the client can prompt the user to save before closing the application.
isDirty
in interface Transaction
true
if the local data and the database differ.public void commit()
commit
in interface Transaction
TransactionListener.beforeCommit(TransactionEvent)
,
TransactionListener.afterCommit(TransactionEvent)
,
DBTransaction
,
Transaction.postChanges()
public int commitAndSaveChangeSet()
Transaction
This method (along with applyChangeSet
and removeChangeSet
is used to
synchronize the cache between root Application
Module instances in an Application Module pool.
commitAndSaveChangeSet commits the transaction, but during the commit process, writes out "changed" EntityImpls to the persistent store. These changes are stored as a "change set". The change set can then be applied to other transactions (that is, to the Entity caches of other root Application Modules).
The integer value returned by this method identifies the change set that is stored in persistent store.
To apply the changes to another transaction (or Application
Module cache),
call Transaction.applyChangeSet(int)
where int
is the integer value returned by commitAndSaveChangeSet
that represents the change set.
For example, assume you have two root Application Modules, named am1 and am2, in an Application Module pool.
// The line below commits the transaction in am1 and writes the change // set to persistent store (database table). The returning snapId // identifies the (persistent) change set. int snapId = am1.getTransaction().commitAndSaveChangeSet(); // Use that change set and apply the changes to the other Application // Module, am2. That is, apply changes from am1 to am2. am2.getTransaction().applyChangeSet(snapId); // When you are done with the change set, remove (free) it. am1.getTransaction().removeChangeSet(snapId);
commitAndSaveChangeSet
in interface Transaction
EntityImpl
change set in persistent store.Transaction.applyChangeSet(int)
,
Transaction.removeChangeSet(int)
public void rollback()
Transaction
appMod.getTransaction().rollback();When this method is invoked,
beforeRollback
events are posted to the listeners, the changes
are discarded,
afterRollback
events are posted, and transient listeners are deleted from the transaction.
For both events, non-transient listeners preceed transient listeners.
In the following example, a method named updateAttr has been implemented to update a row of a View Object vo with the value newAttrVal. If updateAttr succeeds (returns true), the code commits the transaction; otherwise, it rolls the transaction back:
// Assume that appMod has been declared and initialized elsewhere. try { if (updateAttr(vo, newAttrVal)) { // Commit changes to the database, making // updated data available to other Application Modules. appMod.getTransaction().commit(); System.out.println("\n Transaction committed. \n"); } else { appMod.getTransaction().rollback(); System.out.println("\n Transaction rolled back. \n"); } } catch (Exception e) { e.printStackTrace(); }
Note, if your Application Module is an EJB session bean, a new transaction is started for you automatically after calling rollback. You do not have to explicitly start a new transaction.
rollback
in interface Transaction
DBTransaction
,
TransactionListener.afterRollback(TransactionEvent)
,
TransactionListener.beforeRollback(TransactionEvent)
public ServiceMessage sendServiceMessage(ServiceMessage svcMsgIn)
SvcMsgSender
SvcMsgReceiver
.
sendServiceMessage
in interface SvcMsgSender
svcMsgIn
- service message to be sent.
public void sync()
sync
in interface ApplicationModule
public boolean isBoundToWorkingSet()
public void setBoundToWorkingSet(boolean b)
setBoundToWorkingSet
in interface WSApplicationModuleMarshaller
public void setSyncMode(int mode)
ApplicationModule
ApplicationModule.SYNC_LAZY
and ApplicationModule.SYNC_IMMEDIATE
.
SYNC_LAZY is typically more efficient in that it causes fewer round trips to the middle tier.
Note that the sync mode is an attribute of the root application
module. If one calls getSyncMode
or setSyncMode
on a nested application module, it is routed to the root
application module. Also, note that pending changes are
managed at the root application module. When the changes
are flushed from the client to the middle tier, all changes
pending under the root application module are flushed.
setSyncMode
in interface ApplicationModule
setSyncMode
in interface ObjectMarshaller
mode
- the new synchronization mode: SYNC_LAZY
or
SYNC_IMMEDIATE
.ApplicationModule.getSyncMode()
,
ApplicationModule.SYNC_LAZY
,
ApplicationModule.SYNC_IMMEDIATE
public int getSyncMode()
ApplicationModule
Note that the sync mode is an attribute of the root application
module. If one calls getSyncMode
or setSyncMode
on a nested application module, it is routed to the root
application module. Also, note that pending changes are
managed at the root application module. When the changes
are flushed from the client to the middle tier, all changes
pending under the root application module are flushed.
getSyncMode
in interface ApplicationModule
getSyncMode
in interface ObjectMarshaller
ApplicationModule.setSyncMode(int mode)
,
ApplicationModule.SYNC_LAZY
,
ApplicationModule.SYNC_IMMEDIATE
public boolean isInWorkingSet()
isInWorkingSet
in interface ObjectMarshaller
public java.lang.String getVersion()
getVersion
in interface Session
public java.util.Locale getLocale()
getLocale
in interface Session
public void setLocale(java.util.Locale locale)
setLocale
in interface Session
locale
- public void setStoreForPassiveState(byte storageType)
ApplicationModule
Determines where the application module will store serialized versions of its session-state, plus any cached changes. This information can be stored to the database, to a file, or to memory, based on the value of the storageType parameter. The storageType can be set to:
ApplicationModule.PASSIVATE_TO_DATABASE
(default target)ApplicationModule.PASSIVATE_TO_FILE
ApplicationModule.PASSIVATE_TO_MEMORY
This method should be called before calling ApplicationModule.passivateState(byte[])
.
Note that once an application module has serialized
its state, it cannot be asked to change its store. This method will throw
an JboException
if this application module has already
stored its state earlier.
For example, the following code will set the storage to database, file, or memory, based on the value of the str parameter. Database is the default target:
String str = oracle.jbo.common.JboEnvUtil.getProperty("jbo.test.passivateStateTo"); if (str != null) { if (str.equals("file")) { appModule.setStoreForPassiveState(ApplicationModule.PASSIVATE_TO_FILE); } else if (str.equals("memory")) { appModule.setStoreForPassiveState(ApplicationModule.PASSIVATE_TO_MEMORY); }
setStoreForPassiveState
in interface ApplicationModule
storageType
- where the application module state is stored. Can be one
of ApplicationModule.PASSIVATE_TO_DATABASE
(default target),
ApplicationModule.PASSIVATE_TO_FILE
, or ApplicationModule.PASSIVATE_TO_MEMORY
.ApplicationModule.passivateState(byte[])
public ViewObject findViewObjectWithParameters(java.lang.String voName, VariableManager params, boolean executeIfNeeded)
ApplicationModule
findViewObjectWithParameters
in interface ApplicationModule
public ViewObject findViewObjectUsingEntity(ViewObject[] vos, java.lang.String entityDefName, java.lang.String[] attrNames)
ApplicationModule
findViewObjectUsingEntity
in interface ApplicationModule
vos
- an array of possible view objects.entityDefName
- fully qualified name of the entity object.
Should not be null
.attrNames
- if empty, i.e., null
or an array
of length 0, then the attribute matching
rule will be skipped (see the above discussion).
If not empty, it should have only one element
and that element should be the name of an
attribute of the entity. The attribute matching
rule will apply. If a matching view object is found,
attrName[0] upon return should have the name
of a view object mapped to the entity attribute.public java.lang.Object[] transformExceptionParams(ViewObject[] vos, java.lang.String entityDefName, java.lang.String className, java.lang.Object[] params)
ApplicationModule
transformExceptionParams
in interface ApplicationModule
vos
- an array of possible view objects.entityDefName
- fully qualified name of the entity object.
Should not be null
.className
- Qualified classname for the Exception which is being mappedparams
- Parameters from the Exception that is to be transformed into view object
equivalents.public int reservePassivationId()
ApplicationModule
reservePassivationId
in interface ApplicationModule
public int reserveSnapshotId(int flags)
ApplicationModule
Reserves a unique indentifier which may later be specified when passivating AM state as the identifier to be used for re-establishing AM state.
If the PASSIVATE_TRANSIENT_FLAG has not been set then this method
will return a passivation id from one of the persistent Serializers (File
and Database). This method will then reserve a stack snapshot id for
that persistent snapshot. The reserved stack id may be acquired by
invoking ApplicationModule.getMostRecentStackId()
.
If the PASSIVATE_TRANSIENT_FLAG has been set then this method will return a stack id. The stack id is unique for a session transaction only. This may need to be extended to provide a UUID so that applications do not inadvertantly try to undo state across transaction boundaries.
This method may be invoked to obtain a unique snapshot identifier before a snapshot is actually acquired. An example use case is an HTTP servlet that must encode all URLs with the snapshot id before the snapshot is acquired.
reserveSnapshotId
in interface ApplicationModule
flags
- a bit map defining passivation flags.
ApplicationModule.passivateState(int, byte[], int).
public int getMostRecentStackId()
ApplicationModule
Acquire the snapshot id of the most recent stack snapshot. This method may be used by clients to acquire the stack snapshot id of a persistent snapshot.
Please see ApplicationModule.passivateState(byte[])
for more information
regarding stack passivation.
getMostRecentStackId
in interface ApplicationModule
public void beforePassivateState()
public int passivateState(int id, byte[] clientData)
ApplicationModule
passivateState
in interface ApplicationModule
public int passivateState(byte[] clientData)
passivateState
in interface ApplicationModule
public int passivateState(int id, byte[] clientData, int flags)
ApplicationModule
Serializes the current state of this application module's session, along with all changes cached, to a byte array and returns a unique identifier with which to re-establish the state.
This method accepts an id which represents the unique identifier that
should be used to re-establish the application module state. The id
must have been generated by invoking ApplicationModule.reserveSnapshotId(int)
.
The same snapshot type bit which was specified when the snapshot id was reserved should be specified when this method is invoked. For example, if reserveSnapshotId was invoked with the PASSIVATE_TRANSIENT_FLAG set then this method should be invoked with the PASSIVATE_TRANSIENT_FLAG set. Failing to do so may result in invalid snapshot id exceptions.
For more information regarding passivation please see
ApplicationModule.passivateState(byte[], int)
.
passivateState
in interface ApplicationModule
id
- a reserved passivation idclientData
- cached changes, or any information that a client might
want to store.flags
- a bit map defining passivation flags.
ApplicationModule.reservePassivationId()
public int passivateState(byte[] clientData, int flags)
ApplicationModule
Creates a snapshot of the current state of this application module's session. If the PASSIVATE_TRANSIENT_FLAG is not set then the snapshot bytes will be serialized to a persistent store (database or file). If the PASSIVATE_TRANSIENT_FLAG bit is set then the snapshot bytes will be pushed to the application module snapshot stack. The method will then return a unique identifier which may be used to activate the state. Please note that the same snapshot type bit should be used to activate the state as was used to passivate the state. Failing to do so could result in the snapshot record not being located.
This method always works from the top-level application module. If you have nested application modules and you call this method on a inner application module, it will still work from the top-level module.
In contrast to ApplicationModule.activateState(int, SessionData, int)
, which deserializes
a session-state from the persistent store, calling
passivateState, does not affect the transaction state.
The cached changes, or clientData, can be any information that a client might want to store. For example, a JSP client could store the additional client-state information in this byte array so that when the JSP client becomes active and connects to an application module later, it could get its passivated state from the application module. This would reduce the amount of state information stored at the client side to a bare minimum (typically just an application module persistence ID).
A value of null for clientData indicates that the state will be stored, but there is no client data to be preserved.
This method preserves currency. When ApplicationModule.activateState(int, SessionData, int)
is
called, the active row is returned.
For example, the following code snippet inserts a new row in a view object, then calls passivateState to save the application module state. The transaction is rolled back and activateState is called. The value of getCurrentRow called before the passivateState should match the the value of getCurrentRow called after activateState.
// create a view object "depts" ViewObject depts = appModule.createViewObject("myDeptView", "myDeptViewDef"); // insert a new row into depts Row r = depts.createRow(); r.setAttribute("DeptNum","56"); depts.insertRow(r); Row afterInsert = depts.getCurrentRow(); // Passivate the application module state int id = appModule.passivateState(null); // rollback the transaction appModule.getTransaction.rollback(); // move the cursor to the last row -- just to make it interesting depts.last(); // now activate the application module state // currency should be on the new row inserted. appModule.activateState(id, SessionData, int); Row afterActivate = depts.getCurrentRow();
The values afterInsert and afterActivate should be the same.
passivateState
in interface ApplicationModule
clientData
- cached changes, or any information that a client might
want to store.flags
- a bit map defining passivation flags.
public java.lang.String passivateStateForUndo(java.lang.String id, byte[] clientData, int flags)
ApplicationModule
application module state that is passivated using this method will have transaction scope only -- the passivated state will be removed when a transaction commit/rollback occurs.
application module state snapshots that are created using this method will be pushed to an LIFO stack. This stack is defined as part of the application module transaction state and as such will be maintained by application module passivation/activation.
The application developer may specify their own snapshot id by passing an id in for the request. If no id has been specified then an id will be generated by the system and returned. If a snapshot already exists for this transaction with the specified id then the old snapshot will be removed from the snapshot stack.
The application developer may control whether a persistent snapshot
(on-disk) or a transient snapshot (in-memory) is taken with the
BC4J session property, PropertyConstants.ENV_SNAPSHOT_STORE_UNDO
.
A value of PropertyConstants.SNAPSHOT_STORE_PERSISTENT
(default) directs the algorithm to create a persistent snapshot (on-disk)
for this undo request. The location of the persistent snapshot
may further be controlled by the BC4J propery PropertyConstants.ENV_PASSIVATION_STORE
which accepts values of {file,database}.
A value of PropertyConstants.SNAPSHOT_STORE_TRANSIENT
directs the algorithm to create a transient snapshot (in-memory).
Transient snapshots are not guaranteed to be maintained in the event of
system failure.
Setting the flags parameter value to ApplicationModule.PASSIVATE_DEFER_FLAG
allows the snapshot creation to be deferred until the application module
is checked in. For typical web-based applications, this means that the
snapshot would be created at the end of the request when the application
module checkin is invoked.
Most applications using the application module pool are highly encouraged to use this flag value for performance and memory usage optimization. Deferring the snapshot creation allows one snapshot to be used for both transaction undo and failover support.
Deferred passivation should not be requested if it is necessary to capture the application module state at the time of the undo request -- a deferred undo request does not guarantee that the passivated state equals the application module state at the time of the undo request.
passivateStateForUndo
in interface ApplicationModule
id
- the id which is to be used to identify this undo record.
The id should be unique within a transaction. If an id is not
specified then an id will be generated by the system and returned.clientData
- a byte array representing any clientData which the
invoker wishes to associate with the undo record.flags
- an int representing passivateStateForUndo flags. Valid
flags are:
ApplicationModule.PASSIVATE_DEFER_FLAG see the discussion above for more information regarding the use of this flag.
In order to specify default behaviour the application developer may pass 0 for the flags parameter. Default behaviour is defined as immediate passivation.
public byte[] activateState(int id, boolean remove)
activateState
in interface ApplicationModule
public byte[] activateState(int id, boolean remove, SessionData info)
activateState
in interface ApplicationModule
public byte[] activateState(int id, SessionData info, int flags)
ApplicationModule
Deserializes a session-state from the persistent store based on the given id. This method always works from the top-level application module. If you have nested application modules and you call this method on a inner application module, it will still work from the top-level module.
When the PERSISTENT_SNAPSHOT bit is set then this method will attempt to locate the snapshot bytes in a persistent store (database or file). If the PERSISTENT_SNAPSHOT bit is not set then this method will locate the snapshot bytes on the stack.
When this method is called, the rows that are updated are locked; new rows
are inserted into the transaction cache and posted. This is in contrast
to ApplicationModule.passivateState(byte[], int)
, which does not affect the
transaction state.
The activateState method preserves currency. When it is
called, it will return the row that was active when
ApplicationModule.passivateState(byte[], int)
was called.
For an example usage of activateState, see
ApplicationModule.passivateState(byte[], int)
.
If the REMOVE_SNAPSHOT bit is set in the flags then the activation framework will remove the snapshot from the persistent store after activation.
It is up to the developer to devise a clean-up strategy for the redundant store.
activateState
in interface ApplicationModule
id
- a unique integer identifier associated with an instance of the
application module.
ApplicationModule.passivateState(byte[], int)
method.public byte[] activateStateForUndo(java.lang.String id, int flags)
ApplicationModule
Activates an application module state which was created using
ApplicationModule.passivateStateForUndo(String, byte[], int)
.
If the id is not on the undo stack then an exception will be thrown indicating that it is an invalid undo id.
Invoking this method will remove all those undo records that are above (more recent) than the specified undo record.
activateStateForUndo
in interface ApplicationModule
id
- the id of an undo record that was created using ApplicationModule.passivateStateForUndo(String, byte[], int)
flags
- Valid flags are:
N/A -- The flags are currently unused. Please pass 0.
public boolean isValidIdForUndo(java.lang.String id)
ApplicationModule
ApplicationModule.passivateStateForUndo(String, byte[], int)
is still valid.
An id may become invalid if a transaction boundary (commit/rollback) has occured since the id was created.
isValidIdForUndo
in interface ApplicationModule
id
- the id of an undo record that was created using ApplicationModule.passivateStateForUndo(String id, byte[] clientData, int flags)
public void prepareSession(SessionData info)
ApplicationModule
prepareSession
in interface ApplicationModule
public void removeState(int id)
ApplicationModule
Removes the application module's session-state, and any cached change information, from the persistent store based on the given id. For example:
appModule.removeState(id);
removeState
in interface ApplicationModule
id
- an unique integer identifier associated with an instance of the
application module.public void resetState(boolean reload)
resetState
in interface ApplicationModule
public void resetState(int flags)
ApplicationModule
Applications should override/extend ApplicationModuleImpl.reset()
to reset custom application module state. reset() is invoked by the
internal resetState before resetState begins cleaning up
internal application module state.
Flag usage:
RESET_RELOAD_FLAG directs resetState to eagerly reload the application module compoonents.
RESET_ROLLBACK_FLAG directs resetState to rollback the application module.
RESET_INTERNAL_FLAG directs resetState to perform an internal reset only. The ApplicationPool uses this to reset a managed state application module while also managing the previous session's state. For example, when RESET_INTERNAL has been specified the reset will not remove the persistent snapshot records on the snapshot stack.
Resets the non-transaction state of an application module. For example:
appModule.resetState(false);
resetState
in interface ApplicationModule
public void applyChangeSet(int id)
Transaction
This method (along with commitAndSaveChangeSet
and removeChangeSet
is used to
synchronize the cache between root Application
Module instances in an Application Module pool.
Call applyChangeSet to apply changes commited by another
transaction. The integer id parameter (returned by
commitAndSaveChangeSet
) identifies the
change set to be found in the persistent store.
After this call, this transaction's cache is synchronized with the changes from the change set.
For an example of how to use applyChangeSet, see
commitAndSaveChangeSet
.
applyChangeSet
in interface Transaction
id
- an integer representing the change set to apply to the
transaction.Transaction.commitAndSaveChangeSet()
,
Transaction.removeChangeSet(int)
public void removeChangeSet(int id)
Transaction
This method (along with commitAndSaveChangeSet
and applyChangeSet
is used to
synchronize the cache between root Application
Module instances in an Application Module pool.
For an example of how to use removeChangeSet, see
commitAndSaveChangeSet
.
removeChangeSet
in interface Transaction
id
- an integer representing the change set to remove from the
persistent store.Transaction.commitAndSaveChangeSet()
,
Transaction.applyChangeSet(int)
public ApplicationPoolSvcMsgContext doPoolMessage(ApplicationPoolSvcMsgContext ctx)
ApplicationModule
doPoolMessage
in interface ApplicationModule
public void setStyles(java.lang.String name, ClientDocument clientDocument)
setStyles
in interface ApplicationModule
name
- The style Storage NameclientDocument
- The ClientDocument that needs to be savedClientDocument
public ClientDocument getStyles(java.lang.String name)
getStyles
in interface ApplicationModule
name
- The style Storage Name
ClientDocument
public java.lang.String[] getViewObjectNames()
getViewObjectNames
in interface ApplicationModule
ApplicationModule.findViewObject(String)
public java.lang.String[] getViewObjectNames(boolean inclLoadedOnes, boolean inclNotLoadedOnes)
ApplicationModule
This method allows the user to control whether the returning names are those of loaded (instantiated) view objects, or those of not yet loaded (uninstantiated) view objects, or both. Not yet loaded view objects would appear only if lazy loading is turned on.
Note that
is equivalent
to ApplicationModule.getViewObjectNames()
getViewObjectNames(true, false)
.
If this method is called with loadedOnes = true
and
fromDef = true
, both loaded and not-yet-loaded
view object names are returned. No duplicate name is returned.
Note that loaded view objects include dynamically created ones.
getViewObjectNames
in interface ApplicationModule
inclLoadedOnes
- if true
, loaded ones are
returned.inclNotLoadedOnes
- if true
, names of the view objects from the
application module definition are returned. Some of
these VOs could have already been loaded and some may
have not yet been loaded.
public java.lang.String[] getViewDefNames(java.lang.String packName)
getViewDefNames
in interface Session
packName
- the name of the package.
public java.lang.String[] getAllViewDefNames()
getAllViewDefNames
in interface Session
public java.lang.String[] getEntityDefNames(java.lang.String packName)
getEntityDefNames
in interface Session
packName
- the name of the package.
public java.lang.String[] getAllEntityDefNames()
getAllEntityDefNames
in interface Session
public ViewDefInfo registerViewDefObject(ClientViewDef cliViewDef)
public ViewDefInfo saveViewDefObject(ClientViewDef cliViewDef)
public ViewObject createViewObject(java.lang.String voName, java.lang.String vDefName)
createViewObject
in interface ApplicationModule
voName
- name that will be given to the ViewUsagevDefName
- name of the ViewObject class
public ComponentObject createComponentObject(java.lang.String coName, java.lang.String cDefName)
createComponentObject
in interface ApplicationModule
coName
- name that will be given to the ComponentUsagecDefName
- name of the ComponentObject class
public ViewObject createViewObjectFromQueryClauses(java.lang.String voName, java.lang.String eoName, java.lang.String selectClause, java.lang.String fromClause, java.lang.String whereClause, java.lang.String orderByClause)
ApplicationModule
For example, suppose we have an entity object named
Emp
in a package named package1
.
The following code block creates a view object using
this method:
ViewObject vo = am.createViewObjectFromQueryClauses("MyVO", "package1.Emp", // Fully qualified EO name "E.ENAME as EmpName, E.EMPNO as EmpNo", // select clause "EMP E", // from clause "E.DEPTNO = 10", // where clause null); // order by clause
Internally, this methods create a temporary view definition from the entity object and sets the select, from, where, and order-by clauses of the view definition. Then, it uses that view definition to create the view object.
createViewObjectFromQueryClauses
in interface ApplicationModule
voName
- the name to be assigned the view object.
If null
, a system generated
name is assigned.eoName
- the name of the entity object from which the
new view object is to be derived.selectClause
- a SQL statement SELECT clause.
The name or alias of each column should match
the name of the corresponding entity object's
attribute. In the above example code,
"ENAME" and "EMPNO" are database column names,
and "EmpName" and "EmpNo" are entity object's
attribute names. If null
, a default
SELECT clause will be generated from the entity
definition (selecting all entity attributes that
are mapped to database query columns).fromClause
- a SQL statement FROM clause. If null
, a
default FROM clause will be generated from the entity
definition.whereClause
- a SQL statement WHERE clause. If null
,
no where clause is specified, i.e., all rows from
the database table/view are retrieved.orderByClause
- a SQL statement ORDER-BY clause. If null
no order-by clause is established.
public ViewObject createViewObjectOnEntity(java.lang.String voName, java.lang.String eoName)
createViewObjectOnEntity
in interface ApplicationModule
public ViewObject createViewObjectOnRowSet(java.lang.String voName, RowSet rs)
createViewObjectOnRowSet
in interface ApplicationModule
public ViewObject createViewObjectFromQueryStmt(java.lang.String voName, java.lang.String sqlStatement)
createViewObjectFromQueryStmt
in interface ApplicationModule
voName
- name that will be given to the ViewUsagesqlStatement
- SQL statement of the ViewRow
public ViewObject createViewObjectFromQueryStmt(java.lang.String voName, java.lang.String sqlStatement, java.lang.String voImplClass)
createViewObjectFromQueryStmt
in interface ApplicationModule
voName
- name that will be given to the ViewUsagesqlStatement
- SQL statement of the ViewRow
public int executeCommand(java.lang.String command)
Transaction
This method provides a way of bypassing the framework to query the database directly. Internally, the method passes the specified SQL command to a statement on the JDBC connection and executes it.
The following code example uses executeCommand. The SQL string is designed to update the EMP table. This example passes the string to executeCommand, then prints a message to report how many rows were actually updated.
public static void demoUpdateColumn(ApplicationModule appMod) { String sqlStr = "UPDATE EMP " + "SET MGR=7007 " + "WHERE MGR=7698 "; int n = appMod.getTransaction().executeCommand(sqlStr); System.out.println("Updated " + n + " rows."); }
Be careful when using executeCommand, because it will execute any valid SQL statement. For example, you could perform an operation like the following DDL command:
appMod.getTransaction().executeCommand("DROP TABLE MYTEMPTABLE");
A pending database transaction could be committed inadvertently due to the implicit commit performed by DDL operations, as well as having any row locks released.
executeCommand
in interface Transaction
command
- a valid SQL statement.
public java.lang.String dumpQueryResult(java.lang.String query, java.lang.String dumpClassName, java.lang.String[] data)
Transaction
The following code example uses dumpQueryResult.
public static void demoSimpleFetch(ApplicationModule appMod) { // Define and execute a simple SQL statement. String sqlStr = "SELECT Emp.ename FROM EMP Emp "; // dumpQueryResult is a utility method for testing queries. String result = appMod.getTransaction().dumpQueryResult(sqlStr, "oracle.jbo.server.QueryDumpTab", null); System.out.println(sqlStr); System.out.println(result); }
dumpQueryResult
in interface Transaction
query
- the SQL query statement.dumpClassName
- the class that dumps the result to a string.data
- an array of data items.public RowSet executeQueryOnViewObjects(java.lang.String query)
executeQueryOnViewObjects
in interface ApplicationModule
public long getEstimatedRowCount(int rsId, long cap, boolean deferred, boolean isCapped)
public int getRowCount(int rsId)
public int getFetchedRowCount(int rsiId)
public java.lang.String[] getEntityAssociationDefNames(java.lang.String packName)
Session
getEntityAssociationDefNames
in interface Session
packName
- the name of the package.
EntityAssociationDef
names.public java.lang.String[] getAllEntityAssociationDefNames()
Session
getAllEntityAssociationDefNames
in interface Session
EntityAssociationDef
names.public java.lang.String[] getViewLinkDefNames(java.lang.String packName)
Session
getViewLinkDefNames
in interface Session
packName
- the name of the package.
ViewLinkDef
names.public java.lang.String[] getAllViewLinkDefNames()
Session
getAllViewLinkDefNames
in interface Session
ViewLinkDef
names.public java.lang.String[] getViewLinkNames()
ApplicationModule
Example code:
String[] vlNames = am.getViewLinkNames(); // If you want to retrieve all currently loaded view links ViewLink[] vls = new ViewLink[vlNames.length]; for (int i = 0; i < vlNames.length; i++) { vls[i] = am.findViewLink(vlNames[i]); }
If you need names of view objects that are not yet loaded,
use
.
ApplicationModule.getViewLinkNames(boolean, boolean)
getViewLinkNames
in interface ApplicationModule
ApplicationModule.findViewLink(String)
public java.lang.String[] getViewLinkNames(boolean inclLoadedOnes, boolean inclNotLoadedOnes)
ApplicationModule
This method allows the user to control whether the returning names are those of loaded (instantiated) view links, or those of not yet loaded (uninstantiated) view links, or both. Not yet loaded view links would appear only if lazy loading is turned on.
Note that
is equivalent
to ApplicationModule.getViewLinkNames()
getViewLinkNames(true, false)
.
If this method is called with loadedOnes = true
and
fromDef = true
, both loaded and not-yet-loaded
view link names are returned. No duplicate name is returned.
Note that loaded view links include dynamically created ones.
getViewLinkNames
in interface ApplicationModule
inclLoadedOnes
- if true
, loaded ones are
returned.inclNotLoadedOnes
- if true
, names of the view links from the
application module definition are returned. Some of
these VLs could have already been loaded and some may
have not yet been loaded.
public ViewLink findViewLink(java.lang.String viewLinkName)
ApplicationModule
vlName
) may or may not be qualified with the name
of the containing application module. If it is, the view link
name is said to be an AM-qualified view link name. If not, the name
is said to be an unqualified view link name.
An AM-qualified name is a multi-part name (separated by dots).
The last part of the name is the view link name (view link
part of the name). All preceding parts consistitute the name of
the application module that contains the view link. For an AM-qualified
name, findViewLink() first locates the containing application
module using the application module name. In fact, it uses
ApplicationModule.findApplicationModule(String)
to find the application
module. Thus, the application module name in an AM-qualified view link
name may be relative or absolute application module name.
See findApplicationModule() discussions on absolute
and relative application module names. Once
the application module is found, the view link part is used to
find the view link in that application module.
If the view link name is unqualified, the search for the view link is made on this application module.
For example, suppose we have the following containership of nested application modules and view links:
Root (root Application Module) ChildAM1 ViewLinkA GrandChildAM1_1 ViewLinkB GrandChildAM1_2 GreatGrandChildAM1_2_1 ViewLinkC ChildAM2 GrandChildAM2_1 ViewLinkD
ChildAM1.findViewLink("GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewLinkC") will succeed (using relative application module name).
ChildAM2.findViewLink("Root.ChildAM1.GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewLinkC") will succeed (using absolute application module name) and return the same view link as ChildAM1.findViewLink("GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewLinkC").
Both these are AM-qualified name cases.
GrandChildAM2_1.findViewLink("ViewLinkD") will succeed. This is is an unqualified name case.
For view link searching, findViewLink() makes no distinction between view links included the application module during design time and those created programmatically during runtime.
Example code:
ViewLink vl = am.findViewLink("MyVL");
findViewLink
in interface ApplicationModule
viewLinkName
- the name of the view link.
null
if the view link
is not found.ApplicationModule.findApplicationModule(String)
,
ApplicationModule.findViewObject(String)
public ViewLink createViewLink(java.lang.String viewLinkName, java.lang.String viewLinkDefName, ViewObject master, ViewObject detail)
ApplicationModule
defName
parameter.
master
and detail
identifies two
view objects that will linked by this new view link.
For example, assume that during design time, the user used the design time view object Wizard to create two view objects, DeptView and EmpView inside of a package named package1. Then, assume that the user invoked the view link wizard to create a view link definition (in the same package) named DeptEmpViewLink, that correlates the DeptNo attribute of DeptView to the DeptNo attribute of EmpView.
Given these, the user can use the code block like the following to
create in this application module (represented by am
)
two view objects and a view link programmatically (during runtime):
ViewObject voDept = am.createViewObject("MyDeptVO", "package1.DeptView"); ViewObject voEmp = am.createViewObject("MyEmpVO", "package1.EmpView"); ViewLink vl = am.createViewLink("MyDeptEmpLink", "package1.DeptEmpViewLink", voDept, voEmp);
This will set up a master-detail relationship between voDept and voEmp. Whenever voDept's currency moves, voEmp's result set will be refreshed to show employees that work in the department.
This method verifies that the view objects passed in match
the view link definition. Specifically, in the above example,
createViewLink() checks to ensure that the master (voDept
)
is an instance of package1.DeptView
and that the detail
(voEmp
) is an instance of package1.EmpView
.
If match fails, an error (InvalidParamException) is reported,
as the user tried to set up a view link between two view objects where the View
Link definition does not match the view link definitions of master and
detail.
One exception to this match rule is that createViewLink() allows the user to reverse the view link direction. Thus, in the above example, the following would have succeeded:
ViewLink vl = am.createViewLink("MyEmpDeptLink", "package1.DeptEmpViewLink", voEmp, voDept);
Note that in the above code block, voEmp is the master and voDept is the detail. The view link definition is used in the reverse direction.
createViewLink
in interface ApplicationModule
viewLinkName
- the name to be assigned to the view link.
If null
, a system generated
name is assigned.viewLinkDefName
- the name of the link definition from which the new
view link is to be created. It must
be a fully qualified name (including the package name).master
- the view object that is to play the role of master.detail
- the view object that is to play the role of detail.
ApplicationModule.createViewObject(String, String)
public ViewLink createViewLinkFromEntityAssocName(java.lang.String viewLinkName, java.lang.String entityAssocName, ViewObject master, ViewObject detail)
ApplicationModule
For example, suppose we have two entity objects in package package1: Dept and Emp. An entity association DeptEmpAssoc is created between the two entity objects relating the Deptno attribute. Two view objects are defined on these entity objects, DeptView and EmpView.
The following code creates two view objects in this application module and link them, using DeptEmpAssoc:
ViewObject voDept = am.createViewObject("MyDeptVO", "package1.DeptView"); ViewObject voEmp = am.createViewObject("MyEmpVO", "package1.EmpView"); ViewLink vl = am.createViewLinkFromEntityAssocName("MyDeptEmpLink", "package1.DeptEmpAssoc", voDept, voEmp);
This will set up a master-detail relationship between voDept and voEmp. Whenever voDept's currency moves, voEmp's result set will be refreshed to show employees that work in the department.
Internally, this method creates a temporary view link definition from the entity association and uses it to create the view link.
This method verifies that the view objects passed in match
the entity association definition. Specifically, in the above example,
createViewLinkFromEntityAssocName() checks to ensure that
the master (voDept
) uses the Dept entity object
as one of its entity bases and the detail (voEmp) uses the
Emp entity object as one of its entity bases.
If match fails, an error (InvalidParamException) is reported,
as the user tried to set up a view link between two view objects where the
entity association is unable to relate the two view objects.
The primary difference between
ApplicationModule.createViewLink(String, String, ViewObject, ViewObject)
and
createViewLinkFromEntityAssocName is that the former requires
the view link definition name, and the latter requires the entity
association name.
createViewLinkFromEntityAssocName
in interface ApplicationModule
viewLinkName
- the name to be assigned to the view link.
If null
, a system generated
name is assigned.entityAssocName
- the name of the entity association from which the
new view link is to be derived. It must
be a fully qualified name (including the package name).master
- the view object that is to play the role of master.detail
- the view object that is to play the role of detail.
ApplicationModule.createViewObject(String, String)
public ViewLink createViewLinkBetweenViewObjects(java.lang.String viewLinkName, java.lang.String accessorName, ViewObject master, AttributeDef[] srcAttrs, ViewObject detail, AttributeDef[] destAttrs, java.lang.String assocClause)
ApplicationModule
For example, suppose we have two view objects in package package1: DeptView and EmpView. Each of them has an attribute named Deptno.
The following code creates two view objects in this application module and link them by the Deptno attribute:
ViewObject voDept = am.createViewObject("MyDeptVO", "package1.DeptView"); ViewObject voEmp = am.createViewObject("MyEmpVO", "package1.EmpView"); AttributeDef[] deptLinkAttrs = new AttributeDef[] { voDept.findAttributeDef("Deptno") }; AttributeDef[] empLinkAttrs = new AttributeDef[] { voEmp.findAttributeDef("Deptno") }; ViewLink vl = am.createViewLinkFromEntityAssocName("MyDeptEmpLink", "Employees", voDept, deptLinkAttrs, voEmp, empLinkAttrs, null);
This will set up a master-detail relationship between voDept and voEmp. Whenever voDept's currency moves, voEmp's result set will be refreshed to show employees that work in the department.
Using the Association Clause
This view link will generate a SQL clause like EMP.DEPTNO=?
on voEmp. The Deptno value of the current row in voDept
(master) is bound into the bind variable ('?'). This results in limiting
query on voEmp to employees whose Deptno equals the current Dept's
Deptno.
By supplying a non-null
association clause (the last parameter),
the user can override the default SQL clause and replace it with his.
For example, if he wishes to include only employees whose JOB is ANALYST, he
can supply the following assocClause
:
EMP.DEPTNO=? AND EMP.JOB='ANALYST'
.
Using the Accessor Name
If the user supplies a non-null
accessorName
(the second parameter), a
dynamic attribute is added to master
view object which allows
the user retrieve related rows from a master row.
In the above code example, a dynamic attribute "Employees" is added to voDept, such that if the user retrieve that attribute on a row the came from voDept, it will return a row set of Emp's that are related to that row.
The code example below retrieves all rows from voDept and for each Dept row, retrieves its employees by using the "Employees" attribute and prints their names.
Row deptRow; while ((deptRow = voDept.next()) != null) { System.out.println("Dept: " + deptRow.getAttribute("Dname")); RowSet emps = (RowSet) deptRow.getAttribute("Employees"); Row empRow; while ((empRow = emps.next()) != null) { System.out.println(" Emp: " + empRow.getAttribute("Ename")); } }
createViewLinkBetweenViewObjects
in interface ApplicationModule
viewLinkName
- the name to be assigned to the view link.
If null
, a system generated
name is assigned.accessorName
- the name to be given to the dynamic attribute
to be added to master view object.
Given a row from the master view object, the
user can retrieve the attribute of this
name to get a row set of related rows from
the detail view object. See the above discussions
for more info. If null
, no dynamic
attribute is added.master
- the view object that is to play the role of master.srcAttrs
- an array of attributes from master view object to be
related to detail.detail
- the view object that is to play the role of detail.destAttrs
- an array of attributes from detail view object to be
related to master.assocClause
- a custom association clause. See the above
discussions for more info. If null
,
system generated SQL clause will be used.
ApplicationModule.createViewObject(String, String)
,
StructureDef.findAttributeDef(String)
,
RowIterator.next()
,
AttributeList.getAttribute(String)
public ViewObject findViewObject(java.lang.String voName)
ApplicationModule
voName
) may or may not be qualified with the name
of the containing application module. If it is, the view object
name is said to be an AM-qualified view object name. If not, the name
is said to be an unqualified view object name.
An AM-qualified name is a multi-part name (separated by dots).
The last part of the name is the view object name (view object
part of the name). All preceding parts consistitute the name of
the application module that contains the view object. For an AM-qualified
name, findViewObject() first locates the containing application
module using the application module name. In fact, it uses
ApplicationModule.findApplicationModule(String)
to find the application
module. Thus, the application module name in an AM-qualified view object
name may be relative or absolute application module name.
See findApplicationModule() discussions on absolute
and relative application module names. Once
the application module is found, the view object part is used to
find the view object in that application module.
If the view object name is unqualified, the search for the view object is made on this application module.
For example, suppose we have the following containership of nested application modules and view objects:
Root (root Application Module) ChildAM1 ViewObjectA GrandChildAM1_1 ViewObjectB GrandChildAM1_2 GreatGrandChildAM1_2_1 ViewObjectC ChildAM2 GrandChildAM2_1 ViewObjectD
ChildAM1.findViewObject("GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewObjectC") will succeed (using relative application module name).
ChildAM2.findViewObject("Root.ChildAM1.GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewObjectC") will succeed (using absolute application module name) and return the same view object as ChildAM1.findViewObject("GrandChildAM1_2.GreatGrandChildAM1_2_1.ViewObjectC").
Both these are AM-qualified name cases.
GrandChildAM2_1.findViewObject("ViewObjectD") will succeed. This is is an unqualified name case.
For view object searching, findViewObject() makes no distinction between view objects included the application module during design time and those created programmatically during runtime.
Example code:
ViewObject vo = am.findViewObject("MyVO");
findViewObject
in interface ApplicationModule
voName
- the name of the view object.
null
if the view object
is not found.ApplicationModule.findApplicationModule(String)
,
ApplicationModule.findViewLink(String)
public ComponentObject findComponentObject(java.lang.String coName)
ApplicationModule
ApplicationModule.createComponentObject(String, String)
for explanation of BC4J's support for custom component objects.
See ApplicationModule.findViewObject(String)
for explanation on AM-qualified
names and unqualified names.
findComponentObject
in interface ApplicationModule
coName
- the name of the component object.
null
if the component object
is not found.ApplicationModule.findApplicationModule(String)
public void remove()
ComponentObject
remove
in interface ComponentObject
public java.lang.String getDefName()
getDefName
in interface ComponentObject
public java.lang.String getDefFullName()
getDefFullName
in interface ComponentObject
public java.lang.String getName()
getName
in interface ClientComponentObject
getName
in interface ComponentObject
public java.lang.String getFullName()
ComponentObject
getFullName
in interface ClientComponentObject
getFullName
in interface ComponentObject
public java.lang.String getImageLoc(boolean bOpen)
getImageLoc
in class PropertiesHelper
public void prepareViewObjects(java.lang.String[] voNames, java.lang.String[][] voAttrNames, LocaleContext locale)
ApplicationModule
prepareViewObjects
in interface ApplicationModule
voNames
- An array of view object names in this application modulevoAttrNames
- For each view object name, a list of attribute names for which
the custom properties need to be brought over to the client side.public void fetchAttributeProperties(java.lang.String[] voNames, java.lang.String[][] attrNames, LocaleContext locale)
ApplicationModule
For clients like JClient applications, this method helps in downloading all the attribute properties over to the client side in one roundtrip so that startup of these applications are more performant. Calls to properties methods like getFormat(), getLabel(), etc. on the Attribute definition then, does not go over the network boundary for the attributes that are included in the parameter list.
fetchAttributeProperties
in interface ApplicationModule
voNames
- An array of view object names in this application moduleattrNames
- For each view object name, a list of attribute names for which
the custom properties need to be brought over to the client side.public java.util.Hashtable[] fetchRowAttributeProperties(int rsId, RowImpl row, java.lang.String[] attrNames, LocaleContext locale)
public java.lang.Object fetchEvaluatedRowAttributeProperty(RowImpl row, java.lang.String attr, java.lang.String prop, LocaleContext locale)
public java.util.Hashtable refreshProperties()
refreshProperties
in class PropertiesHelper
public java.util.Hashtable getProperties()
Properties
getProperties
in interface Properties
getProperties
in class PropertiesHelper
public void setProperty(java.lang.String hintName, java.lang.Object hintValue)
setProperty
in class PropertiesHelper
public java.lang.Object refreshProperty(java.lang.String hintName)
Properties
getProperty
.
refreshProperty
in interface Properties
refreshProperty
in class PropertiesHelper
hintName
- Property name.
null
.public java.lang.Object[] getRowSecurityHints(RowImpl row, java.lang.String operName)
public java.lang.Object[] getAttributeSecurityHints(RowImpl row, java.lang.String operName, java.lang.String attrName)
public Node writeRowSetXMLWithMap(int rsId, long options, java.util.HashMap map)
public Node writeRowXMLWithMap(int rsiId, RowImpl row, long options, java.util.HashMap map)
public Node writeRowXML(int rsiId, RowImpl row, int depthCount, long options)
public void readRowXML(int rsiId, RowImpl row, Element elem, int depthCount)
public Node writeRowSetXML(int rsId, int depthCount, long options)
public void readRowSetXML(int rsId, Element elem, int depthCount)
protected RowSet[] getRowSets(int voId)
protected RowSetIterator[] getRowSetIterators(int rsId)
public ApplicationModule createWorkerApplicationModule(java.lang.Object sessionCookie)
createWorkerApplicationModule
in interface WSApplicationModuleMarshaller
public AppModuleRequestHandler getAppModuleRequestHandler()
getAppModuleRequestHandler
in interface WSApplicationModuleMarshaller
public void syncWorkingSet(WSApplicationModuleImpl wsAM)
syncWorkingSet
in interface WSApplicationModuleMarshaller
public void finishSyncWorkingSet(WSApplicationModuleImpl wsAM, boolean isEndOfSvcMsg)
finishSyncWorkingSet
in interface WSApplicationModuleMarshaller
public ServiceMessage sendWorkingSetRequests(java.lang.String reqName, WSApplicationModuleImpl wsAM, ServiceMessage msg)
sendWorkingSetRequests
in interface WSApplicationModuleMarshaller
public java.lang.String getResponseName()
getResponseName
in interface WSApplicationModuleMarshaller
public int getRemoteObjectId(java.lang.Object obj)
getRemoteObjectId
in interface WSApplicationModuleMarshaller
public void addResponse(java.io.Serializable res)
addResponse
in interface WSApplicationModuleMarshaller
public void setDataModelRefresh(boolean b)
setDataModelRefresh
in interface WSApplicationModuleMarshaller
public void setVOProperty(int voId, java.lang.String attrName, java.lang.String hintName, java.lang.Object hintValue)
public java.lang.Object refreshVOProperty(int voId, java.lang.String hintName)
public java.lang.Object[] buildViewCriteriaClauses(int voId, boolean forQuery, ViewCriteria viewCrit)
public void clearEntityCache(java.lang.String entityName)
Transaction
clearEntityCache
in interface Transaction
entityName
- the name of the entity whose cache is to
be cleared. If null
, caches
for all entities are cleared.public void clearVOCaches(java.lang.String entityName, boolean recurse)
ApplicationModule
entityName
. This
method finds all view objects that use the entity, then calls
ViewObject.clearCache()
on each view object.
If entityName is null, then the caches of all view objects in the application module are cleared. If recurse is true, it recurses into nested application modules.
clearVOCaches
in interface ApplicationModule
entityName
- fully qualified name of the entity object.
If null
all view object caches
are cleared.recurse
- a flag indicating whether to recurse into nested
application modules.protected void processPiggyback(byte[] pb)
protected java.util.ArrayList processServiceMessage(ServiceMessage svcMsg, boolean isRemarshal)
public void handleException(java.lang.Exception ex, boolean lastEntryInPiggyback)
JboExceptionHandler
handleException
in interface JboExceptionHandler
ex
- an exception.lastEntryInPiggyback
- true
if ex
is the
last of a batch of exceptions and warnings generated by a transaction.public void handleWarning(JboWarning warn)
JboExceptionHandler
handleWarning
in interface JboExceptionHandler
warn
- a warning message.public void finishedProcessingPiggyback(java.lang.Exception[] exArr)
finishedProcessingPiggyback
in interface JboExceptionHandler
public JboExceptionHandler getExceptionHandler()
getExceptionHandler
in interface ApplicationModule
public void setExceptionHandler(JboExceptionHandler hndlr)
ApplicationModule
JboExceptionHandler
interface.
JboExceptionHandler handle exceptions (java.lang.Exception)
and warnings (JboWarning
). In 2 tier mode,
the handler will only see warnings but no exception. In 2 tier mode,
Exceptions are thrown through the normal Java throw mechanism.
They should be handled through catch blocks.
For warnings, no throw/catch mechanism is available. The
handler must process them.
In 3 tier mode, the handler may have to process exceptions in addition to warnings. When a method call is marshalled from the client tier into the middle tier, the middle tier processing of the method may result in more than one exceptions. All these exceptions are caught by the marshalling code and brought back to the client tier. As Java's throw mechanism allows throwing of only one exception, these multiple exceptions cannot be processed through Java throw. Thus, for each of these exceptions, a call is made to handler's handleException(), so that the handler can process it.
setExceptionHandler
in interface ApplicationModule
hndlr
- an exception handler.public void addWarning(JboWarning warn)
ApplicationModule
Adds a warning message. In 2 tier mode, the warning is passed
to this method is sent to the exception handler immediately
if an exception handler is present (exception handler is
specified through a call to ApplicationModule.setExceptionHandler(JboExceptionHandler)
).
This is done through a call to
JboExceptionHandler.handleWarning(JboWarning)
.
In 3 tier mode, the warnings that came to this application module
through calls to addWarning() in the middle tier are "chained"
until the middle tier processing completes. They are brought to
the client at the end of middle tier processing, and, for each
warning, a call is made to
JboExceptionHandler.handleWarning(JboWarning)
if an exception handler is present.
addWarning
in interface ApplicationModule
addWarning
in interface WarningContainer
warn
- warning message.public boolean hasPendingDataPosts()
hasPendingDataPosts
in interface WSApplicationModuleMarshaller
public void setLockingMode(int mode)
Transaction
Changing the locking mode affects only subsequent locks. Current locks are not affected.
setLockingMode
in interface Transaction
mode
- one of LOCK_PESSIMISTIC, LOCK_OPTIMISTIC
or LOCK_NONE.public int getLockingMode()
Transaction
am.getTransaction().getLockingMode();The possible return values are:
If not set by setLockingMode
,
the locking mode defaults to LOCK_PESSIMISTIC
.
getLockingMode
in interface Transaction
public void setBundledExceptionMode(boolean flag)
Transaction
setBundledExceptionMode
in interface Transaction
public final boolean isBundledExceptionMode()
isBundledExceptionMode
in interface Transaction
public void setClearCacheOnCommit(boolean val)
Transaction
The initial value of this flag is retrieved from the Application
Module definition of the root Application Module (an XML attribute
value named "ClearCacheOnCommit" in the Application Module definition's
XML file). If the Application Module definition does not contain
the initial value, the default value is false
, i.e.,
the caches are kept after commit.
The user can override the value of this flag for this Transaction by calling this method. Calling this method does not affect the initial value in the Application Module definition.
setClearCacheOnCommit
in interface Transaction
val
- the new value of the clear-cache-on-commit flag.
true indicates that the Entity Object caches
will be cleared after commit.Transaction.isClearCacheOnCommit()
public boolean isClearCacheOnCommit()
Transaction
After the transaction is committed, the value of this flag is
used to determine whether the Entity Object caches are cleared or
not. If this flag value is false
, the cache contents
are kept. In this case, the cache may contain data that is stale
in that it does not match the newest data (changes made by another
user and committed).
If this flag is true
, the caches are cleared after
the transaction is committed. When the user brings in data
by traversing row collection, the latest data from the database
will be brought into Entity caches.
isClearCacheOnCommit
in interface Transaction
RowSet.executeQuery()
,
Transaction.setClearCacheOnCommit(boolean)
public void setClearCacheOnRollback(boolean val)
Transaction
The initial value of this flag is retrieved from the Application
Module definition of the root Application Module (an XML attribute
value named "ClearCacheOnRollback" in the Application Module definition's
XML file). If the Application Module definition does not contain
the initial value, the default value is true
, i.e.,
the caches are cleared after rollback.
The user can override the value of this flag for this Transaction by calling this method. Calling this method does not affect the initial value in the Application Module definition.
setClearCacheOnRollback
in interface Transaction
val
- the new value of the clear-cache-on-roll-back flag.
true indicates that the Entity Object caches
will be cleared after rollback, and will be
refreshed with new data from the database.Transaction.isClearCacheOnRollback()
public boolean isClearCacheOnRollback()
Transaction
After the transaction is rolled back, the value of this flag is
used to determine whether the Entity Object caches are cleared or
not. If this flag value is false
, the cache contents
are kept. In this case, the cache may contain data that is not in
sync with database in that uncommitted changes made this by user
(before the transaction was rolled back) will be kept.
If this flag is true
, the caches are cleared after
the transaction is rolled back. When the user brings in data
by traversing row collection, the latest data from the database
will be brought into Entity caches.
isClearCacheOnRollback
in interface Transaction
RowSet.executeQuery()
,
Transaction.setClearCacheOnRollback(boolean)
public void loadPackage(java.lang.String packageName)
Session
loadPackage
in interface Session
packageName
- a fully qualified package name.protected RowSet createDetailRowSet(int rsiId, java.lang.String rsName, java.lang.String vlDefName)
rsiId
- RowSetIterator id.rsName
- name that will be given to the ViewUsage.vlDefName
- name of link definition.
protected RowSet[] getDetailRowSets(int rsiId)
protected byte[] getPiggyback()
protected ServiceMessage getServiceMessage()
protected int getViewObjectId(ViewObject vo)
protected java.lang.String toEmpty(java.lang.String s)
public java.lang.Object marshal(java.lang.Object obj)
marshal
in interface ObjectMarshaller
marshal
in interface WSApplicationModuleMarshaller
public java.lang.Object marshalForActivate(java.lang.Object obj)
marshalForActivate
in interface WSApplicationModuleMarshaller
public java.lang.Object unMarshal(java.lang.Object obj)
unMarshal
in interface ObjectMarshaller
public boolean isCustomMarshalled(java.lang.Object obj)
isCustomMarshalled
in interface ObjectMarshaller
public java.lang.String getMarshalledTypeName(java.lang.Object obj)
getMarshalledTypeName
in interface ObjectMarshaller
public void processJboException(JboException ex)
public java.lang.Object getDomainValue(java.lang.String className, java.lang.String[] argTypes, java.lang.Object[] argValues)
public java.lang.Object invokeDomainMethod(Row row, java.lang.String attrId, boolean bringBackDomain, java.lang.String methodName, java.lang.String[] clzNames, java.lang.Object[] args)
public ResponseValues readBlobStream(int rsId, int rowId, java.lang.String attrId, int offset, int length)
public ResponseValues readLob(int rsId, int rowId, java.lang.String attrId, int offset, int length)
public ResponseValues readLobInternal(int rsId, int rowId, java.lang.String attrId, int offset, int length, boolean isCharStream)
public void writeLob(int rsId, int rowId, java.lang.String attrId, byte[] data)
public void writeClob(int rsId, int rowId, java.lang.String attrId, char[] data)
public void closeLob(int rsId, int rowId, java.lang.String attrId, boolean forInput, boolean isCharStream)
public java.lang.String getListBindingName(RowSetIterator rsi, Key rowKey, java.lang.String attrName, java.lang.String lbName)
getListBindingName
in interface ApplicationModule
public RowSetIterator getListBindingRSI(RowSetIterator rsi, Key rowKey, java.lang.String attrName, java.lang.String lbName)
getListBindingRSI
in interface ApplicationModule
public RowSetIterator getPreferredListRSI(RowSetIterator rsi, Key rowKey, java.lang.String attrName, java.lang.String lbName)
getPreferredListRSI
in interface ApplicationModule
public RowSetIterator findRSIForEntity(RowSetIterator[] rsis, int eRowHandle)
ApplicationModule
RowSetIterator
associated with the
specified entity row handle. This method is provided to handle
errors that occur during entity post cycle.
If an error occurs while an entity
is being posted to database, the system throws a
DMLException
. Inside the DMLException
instance is an opaque handle (an integer) identifying the
entity (an instance of EntityImpl
)
that caused the error.
For example, the DMLException could have been thrown because the row violated a database constraint. The client might want to give the user a chance to correct the problem by displaying the the view row that uses this entity.
To do this, the client would "gather" all row set iterators that can be used to report and fix the problem. It would then call this method, passing in the array of row set iterators and the entity row handle returned by DMLException.
Among the row set iterator in the array, findRSIForEntity will pick the "best" candidate and return it to the client. The client then can use the row set iterator to report the problem and give the user a chance to fix the problem.
findRSIForEntity
in interface ApplicationModule
rsis
- an array of RowSetIterator
's to look through.eRowHandle
- the entity row handle.
RowSetIterator
.DMLException
,
RowSetIterator
,
DMLException
public Transaction getTransaction()
ApplicationModule
If the user creates two root application modules, they normally do not share the transaction. To share a transaction acroos root application modules, the user would need to define a global transaction through JTA and have both application modules participate in it.
getTransaction
in interface ApplicationModule
public Session getSession()
ApplicationModule
If the user creates two root application modules, each has its own session.
Note that this is the same session
that is passed to the ApplicationModuleImpl.activate(Session)
call.
getSession
in interface ApplicationModule
ApplicationModuleImpl.activate(Session)
public java.util.Hashtable getEnvironment()
Session
PropertyMetadata
. Applications
should store custom session context in the Session userdata.
getEnvironment
in interface Session
Session.getUserData()
public java.util.Hashtable getUserData()
Session
ApplicationModuleImpl.prepareSession(Session)
.
getUserData
in interface Session
public ApplicationModule findSharedApplicationModule(java.lang.String appModuleName)
Session
findSharedApplicationModule
in interface Session
public void invalidateSession()
Session
invalidateSession
in interface Session
public boolean isRoot()
ApplicationModule
isRoot
in interface ApplicationModule
public void finishedPiggybacking()
finishedPiggybacking
in interface ObjectMarshaller
public ObjectMarshaller getObjectMarshaller()
getObjectMarshaller
in interface WSApplicationModuleMarshaller
public java.lang.Object createRef(java.lang.String structName, byte[] data)
Transaction
createRef
in interface Transaction
public int getMaxFetchSize(int voId)
public void setMaxFetchSize(int voId, int max)
public int getIterMode(int rsiId)
public void setIterMode(int rsiId, int mode)
public void setRowValidation(int rsiId, boolean flag)
public boolean isRowValidation(int rsiId)
public java.lang.String getQueryOptimizerHint(int voId)
public void setQueryOptimizerHint(int voId, java.lang.String hint)
public int getRemoteId()
getRemoteId
in interface ClientComponentObject
public byte getROTEntryType()
getROTEntryType
in interface ClientComponentObject
public void addTransactionStateListener(TransactionStateListener target)
addTransactionStateListener
in interface Transaction
public void removeTransactionStateListener(TransactionStateListener target)
removeTransactionStateListener
in interface Transaction
public void addViewClearCacheListener(ViewClearCacheListener target)
addViewClearCacheListener
in interface Transaction
public void removeViewClearCacheListener(ViewClearCacheListener target)
removeViewClearCacheListener
in interface Transaction
public LocaleContext getLocaleContext()
Session
getLocaleContext
in interface Session
public static void setIgnoreCustomProxies(boolean ignore)
public static boolean isIgnoreCustomProxies()
protected ResponseValues getAMFullRef(ResponseValues handle)
protected ApplicationModuleImpl createProxyApplicationModule(ResponseValues handle)
protected java.lang.Object readMethodResponse(java.lang.String methodName, ServiceMessage sm)
public DataCollector findOrCreateDataCollector(java.lang.Object obj)
findOrCreateDataCollector
in interface ObjectMarshaller
public ResponseValues riGetApplicationModuleInfo()
riGetApplicationModuleInfo
in interface AppModuleRequestHandler
public void riRemove()
riRemove
in interface AppModuleRequestHandler
public ServiceMessage doMessage(ServiceMessage svcMsg)
doMessage
in interface AppModuleRequestHandler
public java.lang.Object riInvokeExportedMethod(java.lang.Object target, java.lang.String methodName, java.lang.String[] argTypes, java.lang.Object[] args)
public boolean isMarshalledLocally()
public void detach()
detach
in interface WSApplicationModuleMarshaller
public void afterActivation(int activationMode)
afterActivation
in interface WSApplicationModuleMarshaller
public boolean isDetached()
public java.lang.String[] getUserRoles()
Session
getUserRoles
in interface Session
public boolean isUserInRole(java.lang.String role)
isUserInRole
in interface Session
role
- the name of the role.
public boolean isClient()
Session
isClient
in interface Session
public static ApplicationModuleImpl createInstance(ResponseValues amInfo) throws ApplicationModuleCreateException
ApplicationModuleCreateException
public void bindToWorkingSet(WSApplicationModuleImpl wsAM)
bindToWorkingSet
in interface WSApplicationModuleMarshaller
public WSApplicationModuleImpl getCurrentWorkingSet()
getCurrentWorkingSet
in interface WSApplicationModuleMarshaller
public java.lang.String getClientProxyInterfaceName()
getClientProxyInterfaceName
in interface WSApplicationModuleMarshaller
public java.lang.Object invokeMethod(java.lang.Object target, java.lang.String methodName, java.lang.String[] argTypeNames, java.lang.Object[] args)
invokeMethod
in interface WSApplicationModuleMarshaller
public void syncMarshaller(ServiceMessage svcMsg)
syncMarshaller
in interface WSApplicationModuleMarshaller
public int getReleaseLevel()
ApplicationModule
For example, the ADF/BC DataControl will invoke getReleaseLevel() to determine if this application module may be released to the ApplicationPool in SHARED_MANAGED_RELEASE_MODE or if the application module may be released in RESERVED_UNMANAGED_RELEASE_MODE.
Two release levels are currently supported:
RELEASE_LEVEL_MANAGED Default. Indicates that the application module is in a state that may be managed by BC4J state management service.
For more information about the BC4J state management service please see the passivation documentation.
RELEASE_LEVEL_RESERVED Indicates that the application module may not be managed by the BC4J state management service. Application modules may specify this release level if they reference session/txn state that may not be recreated by passivation/activation.
Common examples of state that is not currently managed by the state management service are posted database changes and database locks. Other custom examples may exist.
Care should be taken that the default RELEASE_LEVEL_MANAGED level is used for most releases. Using a RELEASE_LEVEL_RESERVED level throughout an application could result in scalability issues as application modules accumulate with the accumulation of new sessions.
If both flags have been specified then RELEASE_LEVEL_RESERVED will take precedence.
getReleaseLevel
in interface ApplicationModule
public void setReleaseLevel(int releaseLevel)
setReleaseLevel
in interface ApplicationModule
ApplicationModule.getReleaseLevel()
public ViewDef createCompositeViewDef(java.lang.String name, java.lang.String fullName)
createCompositeViewDef
in interface ApplicationModule
public void resetMarshaller()
resetMarshaller
in interface ObjectMarshaller
public int getDMLOperationTimeOut()
Transaction
DML_OPERATION_TIMEOUT_WAIT_FOREVER
.
getDMLOperationTimeOut
in interface Transaction
public void setDMLOperationTimeOut(int timeOutMills)
Transaction
DML_OPERATION_TIMEOUT_WAIT_FOREVER
(-1),
which means that the DML operations will not time out. The user will be able to
cancel the long running operations by calling cancelDMLOperations()
started by this Transaction
during postChanges
.
If a positive value of timeout is specified the operation is monitored by a
global monitor thread. The monitor thread waits the specified amount of time
(approximately) in milli-seconds, and cancels the operation by
calling JDBC's Statement.cancel()
.
setDMLOperationTimeOut
in interface Transaction
timeOutMills
- if non-negative, number of milli-seconds before the
DML operation is timed out.public boolean cancelDMLOperations()
Transaction
cancelDMLOperations
in interface Transaction
false
is returned if a DML cancel fails.public RowSet deepCopy(int rsId, java.util.HashMap map, long options)
public OperationDefinitions findOperationDefinitions()
findOperationDefinitions
in interface OperationContainer
public OperationDefinitions findOperationDefinitions(int id)
public void processChangeNotifications()
processChangeNotifications
in interface ApplicationModule
|
Oracle Fusion Middleware Java API Reference for Oracle ADF Model 11g Release 1 (11.1.1.4.0) E10653-05 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |