[
https://issues.apache.org/jira/browse/ARIES-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12835189#action_12835189
]
Guillaume Nodet commented on ARIES-182:
---------------------------------------
We had a length discussion on IRC:
{code}
gnodet: notatibm: are you still working on the obr resolver ? the trader
sample eba can't resolve anymore atm
[1:24pm] notatibm: Hi, I am still working on it.
[1:25pm] notatibm: The trader sample should be resolving using the noop
resolver shouldn't it?
[1:26pm] gnodet: well, actually i think it deploy the first time, but if i
reinstall the app, there is a failure
[1:26pm] gnodet: let me retry from a clean state
[1:27pm] notatibm: I'm currently working on the code to resolve against the
bundle info in the app, but it is a bit involved, so it probably wont be done
today.
[1:28pm] gnodet: i think it's unrelated to what i'm seeing
[1:31pm] gnodet: notatibm: btw, what would you think of splitting (or at least
being able to) the creation of the AriesApplication from its resolution
[1:31pm] gnodet: i just have the use case right now
[1:32pm] gnodet: my appliction fails to resolve, so i can't call
createApplicaiton()
[1:32pm] notatibm: So you want an AriesApplication you can't install?
[1:32pm] gnodet: but then, i have no easy way to see the metadata
[1:32pm] gnodet: well, we could move the resolve() method onto the
AriesAppplication
[1:33pm] gnodet: or call it automatically when an installation is requested
[1:33pm] notatibm: I think it would be good if we could call
createAriesApplication and get something back if it doesn't resolve, but I
would still like the resolve to occur.
[1:35pm] gnodet: but waht if you want to impose constraints on the resolution ?
this mean you need to resovle twice, don't you ?
[1:36pm] notatibm: Leaving resolve to one side I would like to know if any
failures occurred when converting artefacts to bundles, but I would like to get
the messages, but still be able to install.
[1:36pm] notatibm: Resolve is similar to that.
[1:36pm] notatibm: On the subject of resolve there is a resolve method on the
AriesApplicaationManager
[1:36pm] notatibm: So if we had an isInstallable method on AriesApplication we
could then just call the app manager to resolve later.
[1:37pm] gnodet: i don't get it
[1:37pm] notatibm: which?
[1:37pm] gnodet: if you want to call AriesApplicationManager#resolve(), you
need an application first
[1:37pm] gnodet: which has to be resolved
[1:38pm] gnodet: so if you want to impose constraints, you need to first have a
resolved application
[1:38pm] gnodet: let's say the search space is too big, you may not be able to
resovle it without constraints ...
[1:39pm] gnodet: or do i misunderstand the use of constraints ?
[1:39pm] gnodet: they *could* be used to reduce the search space, right ?
[1:39pm] notatibm: ok, so we could either not resolve during create, which I'm
not sure about, or we could add teh ResolveConstraints var args onto create.
[1:40pm] gnodet: what's the need to resolve the applicaton automatically ?
[1:40pm] notatibm: give me a sec to have a peek.
[1:40pm] gnodet: not automatically, but systematically
[1:41pm] notatibm: OK, so I'll describe in terms of an example.
[1:42pm] notatibm: Assume we have the following Application-Content:
a;version="[1.0.0,2.0.0)",b;version="[2.0.0,3.0.0)"
[1:42pm] notatibm: The constraint would allow you to say resolve, but with a
locked down to version 1.5
[1:43pm] notatibm: So you would resolve the following:
a;version="[1.5,1.5]",b;version="[2.0.0,3.0.0)"
[1:44pm] gnodet: are constrainsts only usable on bundles from the
Application-Content ?
[1:44pm] notatibm: No
[1:44pm] gnodet: so you add a constraint to lock down dependency c to a given
version, right ?
[1:44pm] notatibm: yes
[1:45pm] notatibm: although we don't implement this right now and the resolver
api wouldn't support it, which is not good.
[1:45pm] gnodet: what if c isn't actually a dependency but you add a constraint
on it ?
[1:46pm] gnodet: we can always enhance the resolver if needed
[1:46pm] gnodet: would c be ignored or deployed along ?
[1:47pm] gnodet: and btw, the version on the constraint should be a range in
theory, because you may want to say a;version="[1.5,2.0)"
[1:49pm] notatibm: If you don't need c you shouldn't bring it in just because
it is a resolve constraint.
[1:49pm] gnodet: notatibm: well, i'm not asking about best practive
[1:49pm] notatibm: You are right a range would be useful.
[1:49pm] gnodet: saying something is not good to do doesn't mean you can
prevent it
[1:50pm] notatibm: In general I agree, but in this case I would say that the
resolver shouldn't bring it in.
[1:51pm] gnodet: just created a jira for the version range
[1:51pm] notatibm: you are efficient
[1:53pm] jbohn joined the chat room.
[1:53pm] gnodet: haven't fixed it yet
[1:54pm] notatibm: In that case I'll raise a bug for not passing
ResolveConstraints down to the resolver.
[1:55pm] gnodet: during the first resolution ? ok
[1:55pm] notatibm: not specifically.
[1:56pm] notatibm: Just that if you call resolve passing in constraints they
cannot be given to the resolver.
[1:56pm] gnodet: well, the fact that's not implemented is different from the
fact that the api does not allow it at all
[1:56pm] notatibm: I haven't raised one for the create vs resolve, I'm still
pondering it.
[1:56pm] notatibm: The AriesApplicationResolver API doesn't allow it.
[1:56pm] gnodet: yeah
[1:57pm] gnodet: i think we need more flexibility for creating applications
[1:57pm] gnodet: for example, i can't see a way to easily install an
application simply from the APPLICATION.MF
[1:57pm] gnodet: which should be possible given it's the only required thing
[1:57pm] notatibm: Ah, well it is possible, just not necessarily very nicely.
[1:58pm] notatibm: You can provide an implementation of IDirectory that will
delegate to a single file.
[1:58pm] gnodet: yeah, that's a bit cumbersome, but you have a point
[1:58pm] notatibm: quick question, the bundle symbolic name can have
directives, do you know if it can also have attributes?
[1:59pm] gnodet: notatibm: well, i can't say for sure, but i would not see why
[1:59pm] notatibm: I'm updating BundleInfo so I can get to the
directives/attributes.
[2:00pm] notatibm: The spec says you can have parameters on a symbolic name,
which means attributes/directives.
[2:04pm] gnodet: and i think the case i exposed earlier with a constraint on a
non-dependency is valid, if you think about enforcing a set of constraints
without really knowing the application beforehand
[2:07pm] notatibm: OK, so I think it is ok to break out the resolve so it isn't
done implicitly, but the AriesApplication is currently immutable and I want it
to stay that way.
[2:10pm] gnodet: yeah, i was gonna say that about the immutability
[2:10pm] gnodet: but what would you propose then ?
[2:11pm] gnodet: just move the Set<BundleInfo> out of the application somehow ?
[2:11pm] notatibm: Erm, what do you think Set<BundleInfo> is for?
[2:12pm] gnodet: that's the output of the resolution, right ?
[2:12pm] notatibm: no
[2:13pm] notatibm: The output of the resolution is stored in the
DeploymentMetadata interface.
[2:13pm] notatibm: An aries application archive can contain within it bundles
which feed into the resolution process.
[2:13pm] notatibm: The Set<BundleInfo> is how we access the bundles contained
in the archive to use during resolution.
[2:14pm] notatibm: I think I should update the Javadoc for that perhaps.
[2:14pm] gnodet: mmh, i don't follow
[2:14pm] gnodet: the resolver actually returns a Set<BundleInfo>
[2:15pm] gnodet: and that's what will get installed later
[2:15pm] gnodet: ah, found the problem
[2:15pm] notatibm: ok?
[2:17pm] gnodet: yeah
[2:17pm] notatibm: I think I'm going to update the javadoc for AriesApplication.
[2:17pm] notatibm: On the subject of the javadoc is it possible to get a copy
of the javadoc published on our website?
[2:18pm] gnodet: yeah, not sure how easy we can do that automatically, but a
"mvn site:deploy" should work
[2:18pm] gnodet: if it does not, we need to fix the maven build
[2:19pm] notatibm: I'm guessing we will have to fix the maven build
[2:20pm] gnodet: so what about the following changes on the
AriesApplicationManager:
[2:20pm] gnodet: * createApplication() does not resolve the app
[2:21pm] gnodet: * resolve() returns a DeploymentMetadata
[2:21pm] gnodet: * install has an additional argument of type
DeploymentMetadata
[2:22pm] gnodet: when install is called, either the application must have a
DeploymentMetadata already (coming from the eba archive) or one must be given
[2:22pm] gnodet: if none is given, one will be computed wiout any constraints
[2:23pm] notatibm: It doesn't work for me.
[2:23pm] gnodet: why ?
[2:23pm] notatibm: one of the key things I want to be able to do is store a
resolved AriesApplication.
[2:23pm] notatibm: In your model that doesn't work because the
DeploymentMetadata is separate from the Application.
[2:23pm] gnodet: ah, i was gonna ask about that, what's the point in doing that
?
[2:23pm] gnodet: and at which point do you need that ?
[2:24pm] notatibm: I can store the resolved app away and use it later without
having to re-resolve.
[2:24pm] notatibm: So I want to have a resolved app I can deploy to multiple
different running JVM's and know they are the same.
[2:26pm] gnodet: so keep the resolve() method the way it is
[2:26pm] gnodet: so move the resolution process from createApplication() to
resolve() and have install() call resolve() if needed
[2:27pm] gnodet: if install() calls resolve(), the resolved application will be
available from ApplicationContext#getApplication()
[2:28pm] gnodet: or have install() throw an exception is the application is not
resolved
[2:28pm] notatibm: Thinking...
[2:29pm] gnodet: but i'd like an easy api to use, so forcing the user the
resolve() the application does not always make sense, i think this should be
able to happen automatically
[2:30pm] notatibm: I agree
[2:30pm] notatibm: ok, so I would go with install resolves the application.
[2:31pm] gnodet: and you retrieve the resolved application from the
ApplicationContext, keeping the application immutable
[2:31pm] notatibm: AriesApplication has a method isResolved, or something
similar and we doc on the install method that if isResolved returns false the
ApplicationContext.getApplication will return something different.
[2:31pm] notatibm: yes
[2:31pm] gnodet: isResolved() actually comes down to getDeploymentMetadata() !=
null, right ?
[2:32pm] notatibm: good point.
[2:32pm] gnodet: doesn't mean we don't need the method, but just to make sure i
understand
[2:32pm] notatibm: but an isResolved looks nicer.
[2:32pm] gnodet: yeah, i do agree
[2:33pm] gnodet: i'll create a jira
{code}
> The resolution process should be able to be done separatly from the
> AriesApplication creation
> ---------------------------------------------------------------------------------------------
>
> Key: ARIES-182
> URL: https://issues.apache.org/jira/browse/ARIES-182
> Project: Aries
> Issue Type: Improvement
> Reporter: Guillaume Nodet
>
> Several use cases:
> * the user wants to impose constraints without having to resolve the
> application twice
> * the resolution fails but we'd like to understand why and have some
> informations about the application
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.