Laying the Groundwork for the IDE

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

Laying the Groundwork for the IDE

Shane Isbell
I have spent the last week doing a lot of prototyping and investigation into
the IDE (VS/SD) support for NMaven. I would like to outline what I have
found so far. We need the following three systems:

1) MVC Framework: http://jira.codehaus.org/browse/NMAVEN-17
Uses WinForms and includes basic stuff like hooking into event handler,
controller with a command pattern and model changes firing events.

2) .NET Client Calling Maven Embedder through SOAP:
http://jira.codehaus.org/browse/NMAVEN-12
I have gotten a basic xFire SOAP server communicating with a .NET client.
The plan is to use SOAP as the control language with a Socket logger writing
to the IDE console. We will need to wait for the 2.1-alpha release of the
MavenEmbedder to do the final hook up.

3) Flexible directory structure to support CLI, VS and SD:
http://jira.codehaus.org/browse/NMAVEN-18
The approach that I am planning on taking is to use the xpt template format
from SharpDevelop. Within the SD IDE, this template is used to generate a
csproj file and to setup the directories, generate files; so its a mix of
the archetype and the csproj. I am planning on using this xpt template
format as an intermediate format, so that we can easily generate pom to xpt,
pom to csproj, csproj to xpt and so on. What will happen in our case is that
a developer will create a template (we can also include some standard
templates out of the box). Then the maven archetype plugin (for dotnet) will
generate the csproj, pom.xml and the appropriate directory structure based
on that template. Since the pom.xml file will be generated from the xpt
format, we will guarantee that the templates will create a custom project
structure that will build from the command line. Then all we have to do is
to create a template for whatever IDE environment that we are targeting and
we are good to go. Down the road, we can add in the functionality to shift
the structure of entire projects.

Shane
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

brettporter
Administrator

On 15/03/2007, at 11:16 AM, Shane Isbell wrote:

> 2) .NET Client Calling Maven Embedder through SOAP:
> http://jira.codehaus.org/browse/NMAVEN-12
> I have gotten a basic xFire SOAP server communicating with a .NET  
> client.
> The plan is to use SOAP as the control language with a Socket  
> logger writing
> to the IDE console. We will need to wait for the 2.1-alpha release  
> of the
> MavenEmbedder to do the final hook up.


Where does the actual Maven instance run?

- Brett
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

Shane Isbell
MavenEmbedder would run within the same Plexus/Servlet container as xFire.
The Servlet container would almost certainly be Jetty.

Shane

On 3/16/07, Brett Porter <[hidden email]> wrote:

>
>
> On 15/03/2007, at 11:16 AM, Shane Isbell wrote:
>
> > 2) .NET Client Calling Maven Embedder through SOAP:
> > http://jira.codehaus.org/browse/NMAVEN-12
> > I have gotten a basic xFire SOAP server communicating with a .NET
> > client.
> > The plan is to use SOAP as the control language with a Socket
> > logger writing
> > to the IDE console. We will need to wait for the 2.1-alpha release
> > of the
> > MavenEmbedder to do the final hook up.
>
>
> Where does the actual Maven instance run?
>
> - Brett
>
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

brettporter
Administrator
Where? On the local machine, a remote machine, ?

On 17/03/2007, at 3:02 AM, Shane Isbell wrote:

> MavenEmbedder would run within the same Plexus/Servlet container as  
> xFire.
> The Servlet container would almost certainly be Jetty.
>
> Shane
>
> On 3/16/07, Brett Porter <[hidden email]> wrote:
>>
>>
>> On 15/03/2007, at 11:16 AM, Shane Isbell wrote:
>>
>> > 2) .NET Client Calling Maven Embedder through SOAP:
>> > http://jira.codehaus.org/browse/NMAVEN-12
>> > I have gotten a basic xFire SOAP server communicating with a .NET
>> > client.
>> > The plan is to use SOAP as the control language with a Socket
>> > logger writing
>> > to the IDE console. We will need to wait for the 2.1-alpha release
>> > of the
>> > MavenEmbedder to do the final hook up.
>>
>>
>> Where does the actual Maven instance run?
>>
>> - Brett
>>
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

Shane Isbell
Local.

On 3/16/07, Brett Porter <[hidden email]> wrote:

>
> Where? On the local machine, a remote machine, ?
>
> On 17/03/2007, at 3:02 AM, Shane Isbell wrote:
>
> > MavenEmbedder would run within the same Plexus/Servlet container as
> > xFire.
> > The Servlet container would almost certainly be Jetty.
> >
> > Shane
> >
> > On 3/16/07, Brett Porter <[hidden email]> wrote:
> >>
> >>
> >> On 15/03/2007, at 11:16 AM, Shane Isbell wrote:
> >>
> >> > 2) .NET Client Calling Maven Embedder through SOAP:
> >> > http://jira.codehaus.org/browse/NMAVEN-12
> >> > I have gotten a basic xFire SOAP server communicating with a .NET
> >> > client.
> >> > The plan is to use SOAP as the control language with a Socket
> >> > logger writing
> >> > to the IDE console. We will need to wait for the 2.1-alpha release
> >> > of the
> >> > MavenEmbedder to do the final hook up.
> >>
> >>
> >> Where does the actual Maven instance run?
> >>
> >> - Brett
> >>
>
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

brettporter
Administrator
Cool.

I'd like to understand:
- how do we make this easy for people to start?
- is jetty/servlet container needed, or is there a lighter way to  
embed this in something since we don't really need to use a http  
transport since it will always be local?

On 17/03/2007, at 9:26 AM, Shane Isbell wrote:

> Local.
>
> On 3/16/07, Brett Porter <[hidden email]> wrote:
>>
>> Where? On the local machine, a remote machine, ?
>>
>> On 17/03/2007, at 3:02 AM, Shane Isbell wrote:
>>
>> > MavenEmbedder would run within the same Plexus/Servlet container as
>> > xFire.
>> > The Servlet container would almost certainly be Jetty.
>> >
>> > Shane
>> >
>> > On 3/16/07, Brett Porter <[hidden email]> wrote:
>> >>
>> >>
>> >> On 15/03/2007, at 11:16 AM, Shane Isbell wrote:
>> >>
>> >> > 2) .NET Client Calling Maven Embedder through SOAP:
>> >> > http://jira.codehaus.org/browse/NMAVEN-12
>> >> > I have gotten a basic xFire SOAP server communicating with  
>> a .NET
>> >> > client.
>> >> > The plan is to use SOAP as the control language with a Socket
>> >> > logger writing
>> >> > to the IDE console. We will need to wait for the 2.1-alpha  
>> release
>> >> > of the
>> >> > MavenEmbedder to do the final hook up.
>> >>
>> >>
>> >> Where does the actual Maven instance run?
>> >>
>> >> - Brett
>> >>
>>
Reply | Threaded
Open this post in threaded view
|

Re: Laying the Groundwork for the IDE

Shane Isbell
Hi Brett,

Jetty will start automatically when the IDE first starts up. There will, of
course, be a command line option for starting as well.

I guess on the second issue you raised below, you may have concerns about
latency and memory of using Jetty/xFire. There are clearly lighter
solutions: a simple java process with an input socket, say TCP, (from the
IDE) and an output socket (to the IDE console output). This would require
some additional work: the creation of a simple control language and some
queue management with worker threads - since the input socket is for control
commands handled asynchronously. I'm not opposed to lighter processes, but:
1) I have had good success with Jetty's small memory usage in the past;
2) using Jetty/xFire cuts my dev time. If the latency is too high, then I'll
be the first one to dump it; but from past experience with Axis1, simple
SOAP requests over the internal network came in between 100-200 ms
under small load (10/TPS).

The last issue I want to address (which is independent of either of the
technical solutions outlined above) is that since we are decoupling the IDE
and the MavenEmbedder through the network layer, builds need not "only" be
local; rather we have a solution where the build "may" exist on a different
physical node than the IDE. This would allow me to set up test machines with
different OS, .NET vendors (Microsoft/Novell), patch levels etc in a dev
environment. Then after I develop locally, I could test my work - on say a
remote Linux machine using Mono - using my Visual Studio IDE. I know Jason
raised the issue that watching the build on the remote machine is not all
that interesting - I often feel this is the case on my local machine - but
this misses the point because its not just a matter of kicking off a build
on some continuous integration server after development. This is part of
testing and debugging before checking the code in centrally. It allows
targeted builds of specific modules and the running of specific
integration-tests to address platform issues, all without having to log into
the remote machines. In a very large way, I am anticipating the needs of
NMaven itself, since we have to support so many platforms.

Shane

On 3/16/07, Brett Porter <[hidden email]> wrote:

>
> Cool.
>
> I'd like to understand:
> - how do we make this easy for people to start?
> - is jetty/servlet container needed, or is there a lighter way to
> embed this in something since we don't really need to use a http
> transport since it will always be local?
>
> On 17/03/2007, at 9:26 AM, Shane Isbell wrote:
>
> > Local.
> >
> > On 3/16/07, Brett Porter <[hidden email]> wrote:
> >>
> >> Where? On the local machine, a remote machine, ?
> >>
> >> On 17/03/2007, at 3:02 AM, Shane Isbell wrote:
> >>
> >> > MavenEmbedder would run within the same Plexus/Servlet container as
> >> > xFire.
> >> > The Servlet container would almost certainly be Jetty.
> >> >
> >> > Shane
> >> >
> >> > On 3/16/07, Brett Porter <[hidden email]> wrote:
> >> >>
> >> >>
> >> >> On 15/03/2007, at 11:16 AM, Shane Isbell wrote:
> >> >>
> >> >> > 2) .NET Client Calling Maven Embedder through SOAP:
> >> >> > http://jira.codehaus.org/browse/NMAVEN-12
> >> >> > I have gotten a basic xFire SOAP server communicating with
> >> a .NET
> >> >> > client.
> >> >> > The plan is to use SOAP as the control language with a Socket
> >> >> > logger writing
> >> >> > to the IDE console. We will need to wait for the 2.1-alpha
> >> release
> >> >> > of the
> >> >> > MavenEmbedder to do the final hook up.
> >> >>
> >> >>
> >> >> Where does the actual Maven instance run?
> >> >>
> >> >> - Brett
> >> >>
> >>
>