One Star

Subjob exceeds the 65535 bytes limit -- how to reduce the size?

Hello,
i get the error "The code of method tOracleInput_3Process() is exceeding the 65535 bytes limit" when running my job.
The mentioned component is the start component of a subjob in the whole job. The name of the component is GP_DATEN_OBG.
How can i reduce the size of this subjob?
All i do is reading the data out of a table and processing it by calling 5 stored procedures and by doing 5 inserts.
The rest is for logging the progress into a logfile.
So i don't know how to shorten the code. There is nothing i can omit.
Many thanks for any help.
Regards Hartmut
7 REPLIES
Six Stars

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

This doesn't solve the problem, but you are in company: http://www.talendforge.org/bugs/view.php?id=9025
There are Java limits on method size, but of course this kind of hard limit are to be taken in account when choosing a code-generation approach: so only
Talend can do something on this matter (optimize / generate synthetic methods to split code in more chunks).
I see also this outside Talend in the past... this is the same limit that someone have experience when trying to autogenerate ie. JSP pages with more than 64k...
bye
Four Stars

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

I had to separate my jobs, there really is no way around it. :/
One Star

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

Hello,
thank you for your answers.
I also have splitted the work of the subjob into 3 parts and use now 3 subjobs.
It works in this way but i have one problem with the transaction control.
If subjob 1 works fine but while processing subjob 2 there comes an error, then my database is in an inconsistent state if the results of subjob 1 are not rolled back!
So the big question is, if there is any implicit COMMIT done when calling a stored procedure which inserts an entry into a table?
Does anybody know this?
In my whole job i create a database connection (tOracleConnection) and use this connection in every component accessing the database.
At the end of the whole job i do a COMMIT (tOracleCommit) if everything works fine.
Can i be sure that everything is rolled back in case of any error?
Many thanks in advance for any information.
Regards Hartmut
One Star

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

Hello again;-)
to be sure that there is a ROLLBACK in case of any error i have added 3 tOracleRollback components.
I hope that in this way i can guarantee the transactional consistency of my database.
Regards Hartmut
One Star

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

One option might be to use the bulk outputs rather than the regular outputs. You can use those to generate BCP files, then in your last subjob do a single BCP of all of the data.
One Star

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

Hello Andrew,
thank you very much for this hint, i will check that.
At the moment i have a runtime of 40 minutes for processing 254.000 records.
Thats o.k. for me.
But if it will even go faster with bulk inserts then it would be great;-)
Regards Hartmut
I now have tested the Bulk Insert but the SQL*Loader hangs:
http://www.talendforge.org/forum/viewtopic.php?pid=37876#p37876
One Star

Re: Subjob exceeds the 65535 bytes limit -- how to reduce the size?

Hello,
i have new information about transaction control:
When running my job (consisting of a prejob and 4 following subjobs) there is no implicit COMMIT done.
That is there is really only one COMMIT at the end of the complete job.
That is when an error occurs while the job is running everything is rolled back.
That is exactly what i want.
Regards Hartmut