Author |
Message
|
IIB_Intel |
Posted: Fri May 29, 2015 1:33 pm Post subject: Design consideration - Application Libraries |
|
|
Acolyte
Joined: 07 May 2015 Posts: 64
|
Let's say I have a library which has 100 components including few common schemas, jar files, subflows etc.
There are various applications which uses 1 or more components from this common library. Currently, from deployment standpoint, we are bundling/embedding library within the application so in an integration server each application has its own copy.
Since no one application is consuming library entirely and just using less than 5% components from it. We were thinking if we can deploy applications without embedded libraray and deploy libraray separately to the integration server.
Few assumptions:
1. There will only one version of the library at any given point in time.
2. Individual application won't need any customization to the libraray component.
Now the question is that would I be saving any memory if I deploy only one copy of the libraray to the Integration Server level and all application refer to that?
or even then also each application will create one copy for itself and put it in its execution space while in execution?
Another thing, Is there something like deploying libraries at the Integration node level? like we can put jars in shared classes folder? |
|
Back to top |
|
 |
ganesh |
Posted: Fri May 29, 2015 3:26 pm Post subject: |
|
|
Master
Joined: 18 Jul 2010 Posts: 294
|
In version 9 every application needs its own copy of library, in version 10 1-n applications can share a single copy of library. |
|
Back to top |
|
 |
IIB_Intel |
Posted: Fri May 29, 2015 7:00 pm Post subject: |
|
|
Acolyte
Joined: 07 May 2015 Posts: 64
|
Are you saying:
1. You cannot deploy library independent of an application (which wants to use it) in v9?
or
2. You can but even then each application will create its own copy? |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri May 29, 2015 10:45 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
IIB_Intel wrote: |
Are you saying:
1. You cannot deploy library independent of an application (which wants to use it) in v9?
or
2. You can but even then each application will create its own copy? |
1) you can but applications will not take advantage of it. Only independent resources because those get all deployed in the single default container...
2) Each application in V9 will create a copy of the library.
Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
IIB_Intel |
Posted: Mon Jun 01, 2015 7:02 am Post subject: |
|
|
Acolyte
Joined: 07 May 2015 Posts: 64
|
I tried to do this but it failed.
App1 referes lib1 (one subflow). I built App1 then manually removed compiled referenced lib1. I deployed lib1 separately in the integration server. Now when I try to dploy App1, it is not allowing.
Seems like it won't even allow you to deploy App1 without reference lib in v9.
I am looking for options to manage projects in my situation.
Few options which I have identified:
1. Split library into smaller part so the duplication is minimized.
2. Let each application create a copy of the centralized lib and delete what all components they don't need (Each App has to redo this step, whenever they want updates from the lib).
Any recommendation would be appreciated.
Thanks. |
|
Back to top |
|
 |
mqjeff |
Posted: Mon Jun 01, 2015 7:15 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
When you deploy an application, it is deployed into a private container that has no access to any other container.
When you deploy a library or a plain message flow outside of any Application (or Service) it is deployed to a default container that has no access to any other container.
If you want or need to use shared libraries that are only deployed once, you MUST use IIB V10.
In IIB v9 and earlier, YOU MUST DEPLOY all libraries and resources needed for an Application (or Service) with that Application. |
|
Back to top |
|
 |
IIB_Intel |
Posted: Mon Jun 01, 2015 9:04 am Post subject: |
|
|
Acolyte
Joined: 07 May 2015 Posts: 64
|
Thanks for replies..
Now coming back to my original situation - where my library has 100 components including few common schemas, jar files, subflows etc. But no one application is consuming library entirely and just using less than 5% components from it.
What are my options?
1. Split lib into multiple parts (maintenace overhead)
2. Copy lib to individual applications and remove unwanted components (No automatic updates and rework required for any update)
3. Upgrade to IIB 10 (not possible right now).. can be a future consideration.
Any other suggestion? |
|
Back to top |
|
 |
mqjeff |
Posted: Mon Jun 01, 2015 9:45 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
Well,
a) I believe jar files will only be loaded as needed, so that's much less of a consideration.
b) You can also deploy them to be loaded by the shared classloader, or even better by a JavaCompute node specific (or resused by any JCN in an application) classloader.
c) If each application is really only using 5% of the library's function, then perhaps the library isn't nearly as common as it looked at design time.
d) you could do something slightly dumb like deploy the library in a container of it's own and implement a rest or MQ interface to it's functions.
e) Get a different job where they have more reasonable architects or v10...  |
|
Back to top |
|
 |
|