Hi all,
I know this is more of a Hibernate question, but maybe someone knows an answer.
Under what circumstances does Hibernate return null even though the Token
definately exists.
Session session = jbpmSession.getSession();
|
| Token token = (Token) session.get(Token.class, tokenId);
hsqldb is in memory.
that just might have an effect. maybe. possibly. under certain cercumstances :-)
actually if you only get a 200% hit your database seems quite fast.
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3926080#3926080
Reply to the post :
Hi Elvio,
this isn't a jBPM question, is it?
Short answers:
- yes (REQUIRED = same tx)
- no (Hibernate tx = the general tx)
If you read your question you will notice that you are asking for conflicting
behaviour. All in one tx but persistence in another tx. It just doesn't work
that way.
A
This
anonymous wrote : I have one jbpmSession that I open that is used in the main
class (the engine) only and it stays open till the process instance completes
(normally or abnormally). I also have a helper application that opens its own
jbpmSession to save process instance,
is your
Hi Raj,
quick answer to the threads: don't do it. It won't work. Never, ever.
This has been discussed in several threads.
Executing workflows writes logs, logs are on a processInstance level.
Concurrently executing causes concurrent writes to the processInstance =
causes persistence
See:
http://jira.jboss.com/jira/browse/JBPM-311
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3925109#3925109
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3925109
---
Hi 'kurilenko',
Alex is still right.
I've personally answered this question 4-5 times. Search the forums. It's all
there. (And I'm using 3.0.2 too...)
Greetings
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3925110#3925110
Reply to the post :
Hi 'med',
could you give me a billing address?
Serious. For the right amount of money I would be glad to do your job. Tutoring
on general J2EE knowledge is optional and might be connected to a slightly
higher price tag.
Looking forward to a mutualy benefiting business relationsship
View
Hi Roy,
are you asking for a remote interface to jBPM in the sense of a stateless /
statefull session bean?
I think that's on the todo list of the jBPM Team, but hasn't been implemented
yet. Right now you would have to roll your own for that. It wouldn't be totally
trivial as you will run
Hi Koen,
looks alot better :-)
Thanks.
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3924182#3924182
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3924182
---
This
Edgar,
that's not my decision to make. I was going to ask the company here what their
opinion on open sourcing elements is anyway.
The alternative would be a clean room implementation, which wouldn't be too
hard either. Both (asking officially or clean room) will take at least 1-2
weeks.
But
Hi Nick,
no problem.
The 'timestamp' is manually set by whoever edits the workflow. That's why
'timestamp' was in quotes. (This approach does require some thinking by whoever
does the editing.)
I guess you could use some kind of cvs macro/var for this, if you don't trust
your business
Hi Roy,
ALL information is in the database. If you need jBPM in a JVM start jBPM in
that JVM and access it. Or am I missing something?
jBPM is database agnostic. Whatever Hibernate can or cannot do applies to jBPM
as well.
What sort of output are you expecting? (You are(?) expecting something
Hi Tom,
I think you mentioned the jBPM CVS Repository moving from Sourceforge to JBoss.
If so, could you post a URL or access? The web site still states Sourceforge.
I really am interested in having a look at the 3.1 asynch stuff, but I'm not up
to three days of Sourceforge CVS attempts.
Hi Edgar,
if we have a MDB that finds the meaning of life, well... we just might not need
any beans at all anymore. Who knows :-))
What I have is an AbstractAsynchActionHandler that is configable for all kinds
of stuff. Should the node wait for MDB to complete, 'success'-, 'failure'- and
Hi Nick,
you have a valid problem there and I do think the jBPM Team is aware of this.
Since I'm deploying in a J2EE env in a far, far away hosting I have the exact
same problem. My solution was to add a version.properties file to the par, to
parse that and explicitly set the version of the
Hi Raj,
check out the various threads on this subject. This has been discussed in
extreme detail.
As I mentioned there are good reasons not to spawn threads. One would be that
you are simply not allowed to do so in a J2EE environment. The others lie in
the concept and implementation details
Hi Edgar,
I would like to understand this one.
Doesn't szenario b) do the trick? Executing whatever long running task you have
asynchronously by way of JMS or jBPM 3.1?
Then you would only have to lock on the processInstance for the short time you
need to update variables and trigger a
Hi San,
is there any specific reason for shouting?
*.par is just an archive (like *.jar, *.war) containing all files of a
ProcessDefinition.
How to deploy is well documented and thoroughly discussed here in the forum.
Greetings
View the original post :
Hi Raj,
you do the split
| ForkA
|
| StateA1 StateA2
| (sends JMS (sends JMS
| and waits) and waits)
|
|
Hi Raj,
correct, you will not achieve true Java concurrency with a fork. This is
discussed in some detail in various Threads here. There are some very good
reasons for jBPM not to start threads.
jBPM implements concurrency in a business process sense, not in a Java
multithreading sense. This
Hi Raj,
don't do it :-)
jBPM implements concurrent execution in a business process sense, NOT in a Java
Thread sense. As you have to lock on processInstance anyway there is no real
benefit in spawning two threads as one would always be waiting for the other so
you might as well just use the
Hi Henk,
you would have to perform a custom (Hibernate) query linking token to node to
transition name.
Another idea would be to have all tokens that are waiting for a certain message
to set a certain variable and to query that. Could be easier, faster and more
flexible.
Hope this helps you
... which you wouldn't want to do as your workflow would then be in another
transaction then the acceptance of the message and you be losing all
transactional security.
Quote that as gospel :-)
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3922570#3922570
This is a Oracle / JBoss configuration:
| hibernate-configuration
|
| !-- a SessionFactory instance listed as /jndi/name --
| session-factory
| name=java:hibernate/SessionFactory
|
| !-- properties --
| property
Raj,
sorry if this sounds too intrusive, but what are you trying to accomplish?
Your approach seems extremely complicated to me and I have the impression that
you are actually redundantly reimplementing behaviour jBPM already takes care
of. token.signal() will traverse the processDefinition
Raj,
as I just stated in the other thread you will have to lock on processInstance.
What seems to be happening here is that some other thread is doing something
that creates logs. If you take a look at the code you'll see:
| void saveLogs(ProcessInstance processInstance) {
|
Right on.
Basically every non-read access to any element of a processInstance should be
inside of a lock on the processInstance.
Logs are written, variables set, etc. etc. There are many reasons why this is
required.
You cannot however use synchronized(). This locks on the Java Object, not on
You will need to configure Hibernate to use container managed transactions. Its
in the docs somewhere. If you haven't found it by then, I'll post it in a few
hours (sorry, not in the office right now.)
Greetings
View the original post :
Hi Raj,
you can do that with 3.0.2. All you need is a State node. That will return,
stopping the process and leaving everything 'as is' until you trigger the
processInstance / token by whatever means are applicable to your app.
Greetings
View the original post :
Tom,
even jBPM 3.0.1 works splendid in a cluster. You just have to take the same
precautions as with any other clustered app with failover and all bells and
whistles.
And if it's worth anything to you, I've just (literally 30 minutes ago)
deployed a fairly large (volume wise) clustered app
anonymous wrote : Caused by: java.lang.NoClassDefFoundError:
net/sf/ehcache/Element
It's all in the stacktrace. Check the jars in your classpath.
Greetings
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3920396#3920396
Reply to the post :
Hi Raj,
anonymous wrote : org.hibernate.util.ConfigHelper.getResourceAsStream
would indicate that Hibernate is looking on the class path and I don't assume
you have a file '/home/myhome/hibernate.cfg.xml' on your class path.
Greetings
View the original post :
Hi Aaron,
you're on the right track.
anonymous wrote : If the required data is to large for jBPM to efficiently
handle just keep a key to an external data obejct, but the 'leading entity',
the one that knows about state etc. remains the processInstance.
Greetings
View the original post :
Hi Aaron,
just a thought: isn't your processInstance your HolidayRequest?
Things get a lot easier if the processInstance is the leading entity.
There might be situations where the other way around is required i.e. an entity
keeps track of it's processInstances (e.g. if more than one
Hi Aaron,
another attempt:
Your processInstance is a data object that traverses a process as defined in
the processDefinition. It can basically handle any variables you might need.
What I was suggesting is that there might not be any need for a seperate
HolidayRequest object. Just use the
Hi Claudio,
I can't help you on the Task part but as soon as you have concurrency you would
have to lock on processInstance anyway before executing anything.
The only reliable place to do that is in a database. Jbpm gives you
GraphSession.lockProcessInstance() or use Hibernate directly. This
Hi 'lappi',
did you see this:
anonymous wrote : Caused by: org.hibernate.MappingException: Unknown entity:
org.jbpm.graph.def.ProcessDefinition
This usually means that there is no ProcessDefinition with id = 2. Are you sure
you have a ProcessDefinition with the id 2, not version 2. The
Hi 'lappi',
sorry for stating the obvious. Your ProcessDefinition is null = there is no
ProcessDefinition with the name of websale, at least not where Hibernate is
looking for it.
Check your database instances, try deploying a ProcessDefinition 'by hand' in
the source code (create small xml
Hi Raj,
there are a number of very long threads here concerning your problem. Try a
search for asych execution, etc.
You ought to find all you need.
And yes, your problem is very well solvable with jBPM. You probably will need a
bit more infrastructure than a JVM. A bit of JMS wouldn't be bad
Hi Aaron,
jBPM doesn't know... unless you tell it.
How about calling processInstance.getContextInstance().setVariable()?
Greetings
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3919957#3919957
Reply to the post :
Hi all,
today I have an somewhat desperate cry for help: 'HELP!' :-)
I am getting a HibernateException 'instance not of expected entity type:
org.jbpm.graph.def.Action' in LoggingSession.findLogsByToken(long tokenId)
The token and processInstance I am trying to retrieve logs for are ended and
I've isolated the problem.
Just creating the Query
select pl from org.jbpm.logging.log.ProcessLog as pl where pl.token = :token
order by pl.index
(this is from LoggingsSession.findLogsByToken() ) already throws a
HibernateException: instance not of expected entity type:
This one was bizarr!
Hibernate does an autoflush when createQuery is called (I don't know if this
always happens but in this case it did and to find out I had to trace 15
stacklevels of Hibernate code)
As I have some 'transient' objects in the current processInstance (I remove
them before
Hi guys,
sorry for the panic, but I was working against the clock and willing to take
any humiliation connected with stupid questions :-) Speed was all that mattered.
What surprised me was that it was tested code that threw up this problem. I was
just playing around with some very rare
Hi everybody,
has anyone succeeded in deleting a processInstance with
GraphSession.deleteProcessInstance( processInstance ) when the processInstance
has variables?
I keep running into FK_VARINST_TKVARMP constraints. This suggests that varables
are not being deleted.
Known problem? Fixed
...
what would probably work would be to get the context instance, get all
variables, delete the variables, repeat for all tokens.
But I would have to write a disclaimer 'Not my fault' above any such code. That
would be just t ugly.
View the original post :
sorry guy. forget it.
solved as Jira issue JBPM-268.
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3918648#3918648
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3918648
Come on 'katador'!
How do you 'install' Hibernate. Put the jar in the claspath and use it!
Same with jBPM. Put the required jars in the classpath and use them. Thats it.
What more are you expecting?
Though I'm sure the jBPM Team will give you a more sympathetic answer.
Rainer
View the
???
What part of
org.jbpm.graph.exe.ProcessInstance.getId()
don't you understand? I'm serious as you alreasy asked this question:
http://www.jboss.com/index.html?module=bbop=viewtopict=74316
Greetings
Rainer
View the original post :
Hi Joshua,
does your ProcessWrapper have a serialVersionUID? If not try setting one.
But then, why do you need a ProcessWrapper? Why not set the variables dircetly,
then you don't have a problem.
Greetings
Rainer
View the original post :
Hi Saviola,
I'm using up to 500 sequence values per day. int would give me 429 days
until I run out.
Thats a pretty good reason for using long instead of int.
Whats your problem with int?
Greetings
Rainer
View the original post :
Hi Saviola,
ID generation is standard jBPM or Hibernate. If you take a look at the db
tables you'll see that the sequence is used for everyting. Logs, variables,
processDefinitions, processInstances, tokens, whatever. So its not really that
hard to get to 500.
Sequence value use does not
Hi Joshua,
two-phase or not doesn't make any difference here. You usually don't handle the
prepare / commit stuff manually or do you?
There are no nested transactions in Java. So there are two scenarios:
a) Everything happens and is commited or rolled back in the one enclosing tx,
i.e. no new
Hi all,
the org.jbpm.db.hibernate.Converters class has a method initConvertionMaps()
which is called by three other methods.
initConvertionMaps() is not synched on anything and if call concurrently seems
to be causing 'duplicate converter id' runtime exceptions. (I haven't traced it
Hi Bernd,
isn't your current approach the solution? Java implements various classes that
use readResolve() or readObject() to achieve deserialization of various
implementations.
This would have to be on a per class basis, i.e. every class that you change
you have to know how to deserialize
Hi Bernd,
well first of all I said 'I would' so it was basicly hot air, nothing more. I
also mentioned that I 'might' even implement it myself. So I didn't even
promise to do it :-) (But I did descride the idea in some detail in this
thread.)
Problem is that no customer was yet willing to pay
See we're all here on Sunday... gotta change my life!
@Bernd: java.util.Calendar is a good example of an implementation.
The serialization pattern changed between JVMs but Sun had to make the backward
compaitable. The answer was a standard writeObject() method and a readObject()
method that
You will have to lock on the processInstance before you signal a workflow. Use
Hibernate mechs
http://www.hibernate.org/hib_docs/v3/reference/en/html/transactions.html#transactions-locking
or your own locking service.
anonymous wrote : Command Executor in a cluster
If you mean executing jBPM
Hi Elmo,
My problem is that the ONLY access I have to production machines is by way of
EAR File. And no, I don't want to redeploy ProcessDefinitions in a static
initializer(!yuck) every time. That's what I'm doing now because I haven't
solved the problem yet.
The problem is basically that if
Hi Johan,
thanks for the tip but my only access to the productions servers is the EAR ( +
database scripts). I don't even know where the machines are hosted! All I can
do is give the company with the three letter name an EAR and say 'deploy'.
That's it. NO database access, NOTHING interactive,
Thanks for all the responses!
@Johan
Version numbers in props? I'll probably go in that direction, but having the
jBPM version number in props would bring up all sorts of problems. What happens
if I or the three letter company misses a deployment. What happens if someone
goofs. Once the system
Ok guys,
so it's going to be work. No 'magic' solution :-(
Oh well... thanks for trying.
The static initializer is ugly and has big comments above it remove before
production release but its in a central place and will always get called. I'll
have to check if a war even gets deployed. This
Hi Johan,
sorry. Maybe I misunderstood you.
I thought you were suggesting to keep track of the automatically set version
numbers of the ProcessDefinitions - ProcessDefiniton.getVersion(). That would
lead to all kinds of problems as I have no way of knowing whats in the prod env.
Manually
Hi Johan,
I guess you're right. One could store the version in the *.par, check if a
version with that number already exists and depending on the result deploy or
not.
That should do the trick. I guess I was mixing up hibernate id and version.
Thanks
Rainer
View the original post :
anonymous wrote : But at any given time my database is always empty. (Even
process is fininshed or its in wait state) Am I missing something?
This is most definately not true. The definitions, processinstances, state etc.
have to be somewhere or else you couldn't use them. Sorry for stating the
are you sure you are querying the same database instance as jbpm is?
jbpm sees something, you don't. so unless databases have changed alot lately
and become moody beasts you must be looking at different things.
could it be that you are just looking in the wrong place?
hsql can be run as an
There are a few topics on that subject here, some very detailed.
It's basically a question of correct transaction handling. Execute workflows
inside a transaction and you can rollback and start where you were coming from.
Whatever triggered the execution (timer, gui, jms message, etc.) would
Hi all,
just being lazy. Maybe someone has solved this problem before.
How do you deploy ProcessDefinitions (*.par) in an enterprise application
without resorting to a static initializer that would redeploy the same process
definition during every restart / redeployment?
There is no webApp so
Hi Bernd,
I can't resist...
anonymous wrote : cancel ProcessInstances and start complete new processes is
often impossible (because of triggering external systems, sending mails t
ocustomers, ...)
What I suggested was ending the old processInstance and starting the new one in
the same or
Hi Michael,
jbpm can't handle external xml changes. No idea why, but Koen seems to be aware
of this. See http://www.jboss.com/index.html?module=bbop=viewtopict=74568.
What I sometimes do is check schema in XMLSpy and copy-paste to the xml view in
Eclipse.
Greeting
Rainer
View the original
Hi everybody,
just a question: from the way I read the code if an Exception occurs deep
inside of an execution stack of
token.signal(){
| ... node.execute() {
| ... token.signal(){
| ... node.execute() {
| ... token.signal(){ bang! throw new Execution() }...
as wil
Hi heismann,
did you flush the jbpm-/hibernatsession?
try an explicity session.flush() or wrap whatever you're doing in jbpm
beginTransaction / commitTransaction.
Greeting
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3915663#3915663
Reply to the
Hi Zac,
then I don't understand your problem. If the processInstance is being commited
(persisted) that should be what you are expecting or isn't it? If the
processInstance is persisted the surrounding cmt commited and everything is
fine.
If you trace the jbpm / hibernate code you will see
Hi Elmo,
my ideas just a tiny bit different. I am always for using an API instead of
directly going to the DB and changing things.
What I would do is:
- end the old processInstance
- create a new processInstance and map the state of the old processInstance to
the new one
- I would NOT change
Hi 'digitalclock'?
anonymous wrote : Once the signal method has returned... the workflow is in a
wait state, meaning there is nothing jBPM can further do without external
action / input.
You basically have two options:
- 'process the entire workflow on one JMS server' that wouldn't be the JMS
Hi Raghav,
you'll have to implement that yourself.
Rember where you're coming from (set a variable) and in Node W take one of
three explicitly defines transitions (to A, B or C)
Greetings
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3915238#3915238
Hi Elmo,
just a thought: wouldn't it be worth the effort to implement migration classes?
What I am suggesting is not to change existing process defintions but to define
new, changed processes, define a migration class that gets and terminates all
process instances of the old process definition
anonymous wrote : If JMS is the way to go does this mean I need to turn off
auto-acknowledge ? I say this because if the system crashes while processing,
the message will need to be resent. If auto-acknowledge is turned on the
message would be lost ... right/wrong?
Wrong. At least if your
Hi Elmo,
my strategy is even more primitive. Its the SEP (Someone else's problem) -
strategy :-)
I just trust the admin guys to get their cluster coordinated - they might as
well be good for something :-). If I do need a time coordination it's usually
the database (sysdate). If you use
Hi Nilesh,
jBPM goofs with the created XML. Have a look at the referenced schema or open
it in something like XMLSpy, that will tell you what's wrong. Its usually just
an incorrect order of elements. Do not edit the xml outside of Eclipse. For
some unknown reason - I haven't had time or
jBPM is a state machine. If a cluster node fails while executing some external
trigger (ui, timer, jms, whatever) execution will stop and have to be started
again.
Depending on the transaction context you're in this could be done automatically
(redelivered jms, re-executed timer), require ui
Hi Ian,
looks good - on principle - I haven't checked the code in detail.
You still have the problem that all Timers get executed in the same
transaction. There's a Jira issue for that, but I guess it will take some time
till that gets changes.
I've basically done the same - using Quartz and
Hi Vincent,
its basically a question of 'does your node signal the next transition by
itself or does it return?'
jbpm will execute a token until a node returns from the signal() method. (if
your process forks it will follow all paths and then return.) if you want to
decide at runtime to
Hi mdonato,
why doesn't the timer work? or better: how are the timers you tried defined?
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913980#3913980
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3913980
Did you check if the timer was created (check the Timer table in the db)?
Is your SchedulerThread running?
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913992#3913992
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3913992
The timer TABLE was not created? Or there is no entry in the existing table?
If you don't have a timer table you don't have timers, but then you should have
lots of exceptions...
Try setting a break point on the enter-node event and check whats happening. I
do use timers extensively and they
Add a wait state in your workflow and signal the token later on.
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913724#3913724
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3913724
Hi Aron,
it would be interesting to know in what transaction context you try to load the
processInstance. You didn't mention that in your original post.
Greetings
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913752#3913752
Reply to the post :
I think what he meant was:
call the method getId() on the processInstance.
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913601#3913601
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3913601
was clear enough for me... :-)
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3913631#3913631
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=3913631
---
This SF.net email
Sean,
there shouldn't be any problem crossing JVMs. You have exactly the same
concurrency issues as in a single machine. It really shouldn't make a
difference as everything happens against the db.
Greetings
Rainer
View the original post :
Hi all,
just wondering... if Fork explicitly needs to save childTokens can I then
assume that saving the parent token or processInstance will NOT do so?
This would be a real bummer... :-(
Greetings
Rainer
| public class Fork extends Node implements Parsable {
|
| ...
|
|
Hi Ronald,
I believe the emphasis was on ONLY jpdl, meaning withour the gdp(?) files. (I'm
not in the office..)
As they want to do their own GUI thing they would be missing the jBPM GUI files.
Rainer
View the original post :
I have to find that link on why Oracle never, ever does dirty reads... It has a
reason... :-)
(For the rest of you: this is a running gag between Mr. Sean Autocommit and
myself.)
Btw: Is there any situation in which you would accept transactions spanning
nodes? Just curious. I do have the
or...
write a timer that periodically checks for the file and only continues when
present. (then you wouldn't need a thread :-)
personally i'd go for the external polling mech. you would have to mark your
token in some kind and then query it in order to signal the correct token. but
maybe you
Hi 'anant',
just what would these priorities effect?
The execution of Tokens is deterministic. Either triggered by external events,
by Timer execution or something else. Once these are executed the workflow
proceeds till the signaled token has reached a wait state - it then waits for
external
Hi Sean,
nice to see you back. I almost thought you'd left us :-)
Ronald:
Thread spawning is discouraged in the Servlet container, not forbidden (but I
would have to check the specs for that.) Websphere for one logs nasty warning
and 'NoNo' statements that alarm the admin guides but lets
Sean,
don't post it. There are minors in this forum ... and I probably would only get
stomach aches :-)
Rainer
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=3912076#3912076
Reply to the post :
Sean,
you'd really want to know, eh? Well I'll leave it to you to figure out which
version's a dream and which not :-) (Don't forget that Koen is a blonde
d-cup... + fireplace, + cabin oh well... Koen isn't here, was just an idea.)
And concerning your fork stuff. If you know what you're
1 - 100 of 125 matches
Mail list logo