Part dependency help

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Part dependency help

csfahey
My application has grown large enough that it warrants breaking it up to help load speed.  Needless to say, I am trying to build it into parts.  The problem I seem to be having is that I have a dependency problem and don't seem to understand parts dependency well enough to know where to look for the problem.
Here is the config entry:

"packages" : { "parts"  : {
    "boot": { "include" :  [ "Application" ] },
    "user" : { "include" : [ "MainWindow", "DataManager", "class1", "class2", ... ] },
    "report" : { "include" : [ "Report", "GenerateReport" ]}
}}

I am getting the error "Attempt to block load-time dependency of class DataManager of Application" message.  The Application class does not have any references to DataManager or any other classes  within it.  Instead, it creates an instance of MainWindow which is the only relationship between the two.  Here is the creation code:

qx.io.PartLoader.require(["user"], function()
{
        // if the window is not created
        if( !this._mainWindow )
        {
                this._mainWindow = new MainWindow( ).set( { backgroundColor: "white" } );
        }
}, this );

If I move the "DataManager" into the "boot" part, it then gives the error that yet another class from the "user" part is dependent.  I continue to receive the error until the only class that is left is "MainWindow".

What would cause this?  I would appreciate any help determining where this dependency issue is coming from.
Reply | Threaded
Open this post in threaded view
|

Re: Part dependency help

Thomas Herchenroeder
You have probably seen the guidelines for configuring parts in the
manual [1]. The issue you might be running into is rule 2, don't put
load dependencies of one part in the "include" list of another.

[1]
http://manual.qooxdoo.org/3.0.x/pages/development/parts_using.html#in-depth-configuring-the-include-key-of-your-parts

On 11/27/2013 11:34 PM, csfahey wrote:

> My application has grown large enough that it warrants breaking it up to help
> load speed.  Needless to say, I am trying to build it into parts.  The
> problem I seem to be having is that I have a dependency problem and don't
> seem to understand parts dependency well enough to know where to look for
> the problem.
> Here is the config entry:
>
> "packages" : { "parts"  : {
>      "boot": { "include" :  [ "Application" ] },
>      "user" : { "include" : [ "MainWindow", "DataManager", "class1",
> "class2", ... ] },
>      "report" : { "include" : [ "Report", "GenerateReport" ]}
> }}
>
> I am getting the error "Attempt to block load-time dependency of class
> DataManager of Application" message.

... it's probably "DataManager *to* Application", right?!

>    The Application class does not have
> any references to DataManager or any other classes  within it.

But that's not what it says. It says that DataManager has a dependency
to Application. This dependency might not be obvious (i.e. in the form
of a literal mentioning of "Application" in DataManager's code). Rather,
DataManager might reference a class that references a class that
references a class ... which has a reference to Application. And the
crucial part is that this chain of dependencies is required at load-time.

So in DataManager, look out for class references in the 'defer' section,
or in initialization expressions of class members (which are all
required at load-time), and make your way from there. (The Generator
could dump all dependencies of DataManager but that's an advanced
feature so I'm sparing you this for the moment).

>    Instead, it
> creates an instance of MainWindow which is the only relationship between the
> two.  Here is the creation code:
>
> qx.io.PartLoader.require(["user"], function()
> {
> // if the window is not created
> if( !this._mainWindow )
> {
> this._mainWindow = new MainWindow( ).set( { backgroundColor: "white" } );
>          }
> }, this );
>
> If I move the "DataManager" into the "boot" part, it then gives the error
> that yet another class from the "user" part is dependent.  I continue to
> receive the error until the only class that is left is "MainWindow".
>
> What would cause this?  I would appreciate any help determining where this
> dependency issue is coming from.

My take is, in some class, maybe deep down in your application, you have
a reference back to the Application class. Wherever such a class is used
(transitively), you get the dependency to Application. You need to
resolve those dependencies to Application.

HTH,
T.


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
qooxdoo-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
Reply | Threaded
Open this post in threaded view
|

Re: Part dependency help

csfahey
Thanks.  That helped quite a bit to get past the generate source stage.  Now when I run it I get an error:  "Incomplete parameters".  I am not sure what is going on.  I set my debugger to break in the main application class but it doesn't seem to even create the class.

Any thoughts?

Here is the boot part:

"boot" :
{
        "include" :
        [
                "${QXTHEME}",
                "Application",
                "util.DataUtil",
                "util.StringUtil"
        ]
}

I have also set the translation directive in "package":
"i18n-as-parts" : true