[EJB3 Development] - EJB asynchronous method
by maverik87
maverik87 [https://community.jboss.org/people/maverik87] created the discussion
"EJB asynchronous method"
To view the discussion, visit: https://community.jboss.org/message/748868#748868
--------------------------------------------------------------
I'm using JBoss 7.1.1 final. I have a stateful EJB with an asynchronous method. From a jsp I call a synchronous method of the previous EJB and this method call the asynchronous one of the same EJB via proxy.
@Stateful
@Remote(IExcursionDAOWithPrefetch.class)
public class ExcursionDAOWithPrefetch implements IExcursionDAOWithPrefetch {
@Resource SessionContext ctx;
@EJB(lookup=...) IExcursionDAO excursionDAO;
...
public Excursion findExcursionById(int id, boolean loadCoordinates) {
// Retrieve from cache
Excursion excursion = cache.getExcursionById(id);
if(excursion == null) {
// Retrieve from database
excursion = excursionDAO.findExcursionById(id, loadCoordinates);
logger.info("excursion not in cache");
}
else {
logger.info("excursion in cache");
}
ctx.getBusinessObject(IExcursionDAOWithPrefetch.class).loadCache(excursion);
return excursion;
}
@Asynchronous
public void loadCache(Excursion excursion) {
if(excursion != null) {
cache.invalidateCache();
cache.addExcursion(excursion);
List<Excursion> closeExcursions = excursionDAO.findCloseExcursions(excursion, 10);
if(closeExcursions != null) {
for(Excursion exc : closeExcursions) {
cache.addExcursion(exc);
}
}
}
}
}
loadCache() method is executed asynchronously but the jsp awaits its end even though it calls findExcursionById() method (and not loadCache()).
Can someone help me?
--------------------------------------------------------------
Reply to this message by going to Community
[https://community.jboss.org/message/748868#748868]
Start a new discussion in EJB3 Development at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&con...]
12 years, 8 months
[JBoss AS 7 Development] - CLI Batch Mode
by Alexey Loubyansky
Alexey Loubyansky [https://community.jboss.org/people/aloubyansky] modified the document:
"CLI Batch Mode"
To view the document, visit: https://community.jboss.org/docs/DOC-16728
--------------------------------------------------------------
The batch mode allows one to group commands and operations and execute them together as an atomic unit, i.e., if at least one of the commands or operations fails, all the other successfully executed commands and operations in the batch are rolled back.
Not all of the commands can be added to a batch. E.g. commands like 'cd', 'ls', 'help', etc are not added to the batch since they don't translate into operation requests. These commands (if entered while in the batch mode) will be executed outside of the batch. Only the commands that translate into operation requests are allowed in the batch. The batch, actually, translates into a 'composite' operation request.
h2. Composing batches from scratch
Interactive mode begins with the +batch+ command.
[standalone@localhost:9999 /] batch
[standalone@localhost:9999 / #]
The '#' sign in the prompt indicates that the CLI is in the batch mode. Operations and commands like deploy, data-source, etc won't be executed as they are entered, instead they will be added to the current batch.
[standalone@localhost:9999 / #] deploy my.ear
#1 deploy my.ear
[standalone@localhost:9999 / #] data-source enable --name=ExampleDS
#2 data-source enable --name=ExampleDS
[standalone@localhost:9999 / #] /system-property=myprop:add(value=myvalue)
#3 /system-property=myprop:add(value=myvalue)
[standalone@localhost:9999 / #]
But commands that don't translate into operation requests (or commands that are read-only) will be executed immediately, i.e. outside the batch. E.g.
[standalone@localhost:9999 / #] ls
extension path subsystem deployment management-interfaces
interface socket-binding-group
[standalone@localhost:9999 / #] cd subsystem=web
[standalone@localhost:9999 subsystem=web #] read-attribute default-virtual-server
default-host
[standalone@localhost:9999 subsystem=web #]
To see the list of the commands and operations in the current batch execute +list-batch+
[standalone@localhost:9999 / #] list-batch
#1 deploy my.ear
#2 data-source enable --name=ExampleDS
#3 /system-property=myprop:add(value=myvalue)
[standalone@localhost:9999 / #]
Any line in the batch can be edited with +edit-batch-line+ command by providing the line number as the first argument and the edited command as the second one
[standalone@localhost:9999 / #] edit-batch-line 2 data-source disable --name=ExampleDS
#2 data-source disable --name=ExampleDS
[standalone@localhost:9999 / #]
If you want to re-order the lines in the batch you can do this using +move-batch-line+ by specifying the line number you want to move as the first argument and its new position as the second argument
[standalone@localhost:9999 / #] move-batch-line 3 1
[standalone@localhost:9999 / #] list-batch
#1 /system-property=myprop:add(value=myvalue)
#2 deploy my.ear
#3 data-source disable --name=ExampleDS
[standalone@localhost:9999 / #]
A line can be removed using +remove-batch-line+ specifying the line number as the argument
[standalone@localhost:9999 / #] remove-batch-line 2
[standalone@localhost:9999 / #] list-batch
#1 /system-property=myprop:add(value=myvalue)
#2 data-source disable --name=ExampleDS
[standalone@localhost:9999 / #]
You can postpone batch editing if suddenly you want to perform some other tasks outside the batch by executing +holdback-batch+
[standalone@localhost:9999 / #] holdback-batch
[standalone@localhost:9999 /]
To return to the held back batch, just execute +batch+ command
[standalone@localhost:9999 /] batch
Re-activated batch
#1 /system-property=myprop:add(value=myvalue)
#2 data-source disable --name=ExampleDS
[standalone@localhost:9999 / #]
Actually, it's possible to hold back more than one batch by specifying the name under which the batch should be saved (in runtime memory)
[standalone@localhost:9999 / #] holdback-batch mybatch
[standalone@localhost:9999 /]
Now, the batch is saved under the name 'mybatch'. To activate it, you now have to execute +batch mybatch+. Executing +batch+ without arguments will start a new batch.
[standalone@localhost:9999 /] batch
[standalone@localhost:9999 / #] deploy my.ear
#1 deploy my.ear
[standalone@localhost:9999 / #] holdback-batch
[standalone@localhost:9999 /]
Now there are two batches held back. Too see the list of all the held back batches, execute +batch+ with +-l+ switch
[standalone@localhost:9999 /] batch -l
<unnamed>
mybatch
[standalone@localhost:9999 /]
The unnamed batch (there can be only one unnamed batch) is activated by executing +batch+ without arguments
[standalone@localhost:9999 /] batch
Re-activated batch
#1 deploy my.ear
[standalone@localhost:9999 / #]
The currently active batch can be discarded by executing +discard-batch+
[standalone@localhost:9999 / #] discard-batch
[standalone@localhost:9999 /] batch -l
mybatch
[standalone@localhost:9999 /]
Note, that after you re-activate your batch it is removed from the held back list and not associated with any name anymore. So, if you want to hold it back again, you will have to give it a new unique name or leave it unnamed.
Finally, to execute the currently active batch use +run-batch+ command. A successfully executed batch is automatically discarded and the CLI leaves the batch mode.
[standalone@localhost:9999 /] batch mybatch
Re-activated batch 'mybatch'
#1 /system-property=myprop:add(value=myvalue)
#2 data-source disable --name=ExampleDS
[standalone@localhost:9999 / #] run-batch
The batch executed successfully
[standalone@localhost:9999 /] batch -l
[standalone@localhost:9999 /]
h2.
h2. Executing batches stored in files
In case there is a set of commands and operations that peform a common task which could be executed frequently, they could be saved in a file which later could be specified as the argument to the +batch+ command. In this case the +batch+ command will start the batch mode and load the commands and operations from the specified file into the current batch. Now, you can edit the batch (edit, remove, add lines) and/or simply execute +run-batch+.
[standalone@localhost:9999 /] batch --file=myscript.txt
[standalone@localhost:9999 / #] list-batch
#1 deploy my.ear
#2 data-source --name=ExampleDS --min-pool-size=5
[standalone@localhost:9999 / #] data-source --name=ExampleDS --max-pool-size=10
#3 data-source --name=ExampleDS --max-pool-size=10
[standalone@localhost:9999 / #] run-batch
The batch executed successfully
[standalone@localhost:9999 /]
In case you don't need to modify the batch stored in the file, you can simply execute it by passing the file name as the argument to +run-batch+ without previously loading it using +batch.+
[standalone@localhost:9999 /] run-batch --file=myscript.txt
The batch executed successfully
[standalone@localhost:9999 /]
h2. Headers for batch request
+run-batch+ command accepts +--headers+ argument which can be used to attach operation headers to the composite operation request the batch translates to. Please, refer to the paragraph *Headers* on https://community.jboss.org/docs/DOC-17599 The operation request format article to find out more about the supported headers and their syntax.
h2. Batches with properties
In case you need to parameterize your batches, you could use system properties. This is described in https://community.jboss.org/docs/DOC-18726 System properties in command argument and operation parameter values.
--------------------------------------------------------------
Comment by going to Community
[https://community.jboss.org/docs/DOC-16728]
Create a new document in JBoss AS 7 Development at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=102&c...]
12 years, 8 months