Maven 2.1 Plugin and Extension Loading Design

Size: px
Start display at page:

Download "Maven 2.1 Plugin and Extension Loading Design"

Transcription

1 Maven 2.1 Plugin and Extension Loading Design Maven Plugin and Extension Loading Design Since its 2.0 release, Maven has had two modes of extension. The first, its plugin framework, is what provides the flexibility to execute collections of plugins that actually perform the build tasks for a project. These tasks are handled by plugins in order to allow recombination of the tasks in order to satisfy nearly any type of project build, and they depend on Maven to keep their respective classpaths independent from one another, to prevent incompatibilities. The second extension mode in Maven 2 is what we know as build extensions. These are artifacts injected into a project's build that provide custom implementations of components that help Maven's core manage the runtime representation of projects. They might include Maven Wagon implementations, to provide access to artifacts and metadata over special network transports; or, they might contain custom plugin mappings (also known as lifecycle mappings) and artifact handler components, geared toward special project packaging types. Since the Maven 2.0 release, we've learned a lot about what works and what doesn't in the way Maven 2.0.x conceives of these different extension frameworks. In developing Maven 2.1.x, it's time to take a look at what we can improve. Existing Design - Maven 2.0.x Plugins Overview Plugins in the Maven 2.0.x design are separated from the core Maven classloader by the PluginManager. It creates and manages separate PlexusContainer instances for each plugin, which are child containers of the core Maven PlexusContainer instance. This allows plugin artifacts to be added to the child container, where they will be isolated for that plugin's use only. Plugin-Tracking Design Flaws In addition to container management, the PluginManager and its associated components are responsible for tracking plugins in the runtime, so they can be reused in the event that multiple mojos are used from a single plugin, or multiple projects in the same reactor make use of the same plugin. In 2.0.x, plugins are tracked by the key: {groupid, artifactid}, which doesn't take into account the possibility that projects may declare different versions or plugin-level dependencies for a given plugin. This exposes two critical design problems in Maven 2.0.x. First, that a hierarchy of projects using two different versions of a given plugin will behave inconsistently between single-project builds of its modules and a single, multimodule build of the whole hierarchy. Since this is much simpler to talk about concretely, let's consider an example. When projects A and B are both listed as modules (in that order) of some top-level project T, they can be built from either the T level (where both A and B will normally be built), or individually. Imagine project A declares that it uses the maven-assembly-plugin version 2.0, and binds the 'attached' goal to its lifecycle. Then project B declares that it also depends on the maven-assembly-plugin, but this time it depends on version 2.1, and binds the 'single' goal to its lifecycle. When project A is built individually, maven-assembly-plugin version 2.0 executes as part of the build, and the project is built successfully. When project B is built individually, maven-assembly-plugin version 2.1 is used, and project B's build likewise succeeds. However, when project T is built, things change. Project A is built as the first module build after T itself succeeds (A is listed first, and there is no interdependency between A and B, so A is built ahead of B); project A's build succeeds. Next, project B is built, and fails. This is because project A already prompted Maven to load maven-assembly-plugin, version 2.0, so it could run the 'attached' mojo. When project B comes along expecting Maven to have loaded maven-assembly-plugin, version 2.1, it fails to locate the 'single' mojo (assembly:single wasn't introduced until version 2.1) and the build fails. The second major design flaw exposed by {groupid, artifactid} tracking of plugins is that it cannot track multiple plugin-level-dependency profiles for a single plugin in the runtime. To illustrate, consider again a three-project hierarchy, T, A, and B. T lists A and B as modules in that order. Project A declares that it uses the maven-antrun-plugin, with no plugin-level dependencies. Project B also declares that it uses the maven-antrunplugin, but it adds plugin-level dependencies on ant-commons-net, commons-net, and oro, which are necessary to run the 'telnet' Ant task. When built individually, both project A and project B will succeed. However, when build from the level of project T, we see a similar problem to the aforementioned. Project A's build succeeds, and in doing so, prompts Maven to load the maven-antrun-plugin with NO plugin-level dependencies. When project B builds, it expects Maven to consider the plugin-level dependencies it declares for the antrun plugin, and naively uses the 'telnet' Ant task. Since Maven used the plugin-level dependencies from project A when loading the antrun plugin (there were none), it doesn't have access to the 'telnet' Ant task, and project B's build fails. Both of these failing use cases expose an interesting effect in Maven 2.0.x: that the success or failure of a multimodule build can depend entirely on the interproject dependencies and module ordering that affect the order in which reactor projects are built, and therefore, the information used to initialize the plugins that build them. Artifact Filtering Aside from the problems related to plugin versions and plugin-level dependencies, which are actually related to the way in which the PluginManager tracks plugins, the design of Maven 2.0.x also exposes the potential for plugin-core class incompatibilities. This arises from the

2 fact that Maven filters the dependencies resolved for its plugins, to exclude those artifacts that are already present in the core classloader. This filtering step does not take into account the versions of core artifacts specified by plugins or provided by the core, which implies that a plugin could rely on maven-project version 2.1, yet still be executed inside a Maven runtime. Obvious incompatibilities like NoSuchMethodError can occur from this practice. Maven 2.0.x mitigates this potential for incompatibility using the 'prerequisites/maven' section of the POM, in which the minimal version of Maven with which the plugin is compatible is stated. However, this minimal value makes no allowance for an upper limit. As APIs are deprecated then removed over the course of successive Maven releases, these old plugin versions could become incompatible without the system recognizing that fact. NOTE: This has been at least partially alleviated in 2.1.x by allowing version ranges for the 'prerequisites/maven' section of the POM, which allow both lower and upper bounds on the compatibility statement. Plugin Extensions-Flag Limitations Finally, Maven 2.0.x provides severe restrictions for plugins that use the extensions flag. The intention of this flag is to allow plugins to also contribute custom component instances and lifecycle mappings. However, the way 2.0.x actually uses the extensions flag limits plugin component contributions to custom artifact handlers and lifecycle mappings - in short, only custom project and dependency types can be contributed by way of a plugin with extensions == true. To make matters worse, by the time a plugin is found to have extensions enabled, all of the projects in the reactor have already been instantiated. This means the Artifact instances these projects contain (and which will be used to install and deploy the project's artifacts) contain references to ArtifactHandler instances that may have been created on-the-fly in response to an unrecognized packaging type, all because the plugin that provided that ArtifactHandler implementation had not been loaded yet. The net effect is that plugins using the extensions flag are only able to provide lifecycle mappings for projects in the reactor, and ArtifactHandler instances for use in resolving dependencies of projects in the reactor. Plugins that would bring in legitimate, alternative implementations of core Maven components for use throughout the project build are prohibited from doing so. Build Extensions Build extensions in the Maven 2.0.x design are loaded into one of two places, based on some relatively arbitrary (at least, from the perspective of a Maven user) rules. Depending on the conditions specified below, extension classes will either be added to a special 'extension' child PlexusContainer instance, or added directly to the core Maven PlexusContainer instance. Extensions with Lifecycle Mappings If a build extension or one of its dependency artifacts contains a lifecycle mapping, that extension's entire dependency chain is added to the core classloader (except for those dependencies filtered out because they're already present in the Maven core). This allows the LifecycleExecutor to lookup these mappings when it tries to build a project with that custom packaging (lifecycle mappings are keyed by a project packaging, and specify the basic steps required to build that sort of project). Extensions with 2 or Fewer Total Artifacts, Including the Extension Artifact Itself NOTE: Recently (in or 2.0.8), the plexus-utils library was allowed to vary independently for each plugin. This caused problems with plugins that depended on plexus-utils to be in the core, and had therefore incorrectly stated their actual dependencies in their POMs. To mitigate this problem, plexus-utils version 1.1 is injected into any extension dependency chain that doesn't already include a plexus-utils version. This is why the rules below make special consideration for extensions with 2 or fewer artifacts in their classpath, instead of limiting it to 1 artifact. If the extension doesn't contain lifecycle mappings and its total classpath consists of 2 or fewer artifacts, that extension's entire classpath is again added to the core classloader. This is done to account for the original assumption that certain plugins may have configuration files or other custom-configuration classes that are made available to the project build through extensions. It was done to preserve functionality for builds already taking advantage of this in the wild after the 2.0 release. Extensions with More than 2 Total Artifacts If an extension's total classpath consists of more than 2 artifacts, that extension is assumed to fill the third common use case for build extensions: Wagon implementations. (The first two use cases are lifecycle mappings and artifact handlers, and are meant to be accommodated by the first rule, above). These extensions are added to a global child PlexusContainer instance called 'extensions', and any Wagon implementations are later mapped to the extensions container inside the WagonManager component for reference during the build. It appears that no other code in Maven's core makes use of the extensions-specific child container, and only the Wagon use case is supported for extensions with a classpath longer than 2 artifacts. The main reasoning for this isolation is to prevent Wagon implementations from dragging other APIs into the core classloader that will later cause incompatibilities with certain plugins in the build. A classic example of this is the Maven SCM Wagon, which depends on Maven SCM (used to access systems like Subversion and CVS). If Maven SCM were added to the core classloader and specified an old version for this artifact, plugins like the maven-release-plugin may encounter runtime exceptions based on incompatible classes in the older library. Why These Rules Are Inadequate

3 Despite the best of intentions, these rules are still hopelessly inadequate for preserving the viability of a build. There are several obvious ways in which careless or complex build extensions could result in critical incompatibilities after Maven allocates them using the logic above. For example: Add plexus-utils version 1.0 as a build extension. There is no logical reason to do this, of course, but you could substitute any other common library that has no dependencies. Users might opt to add these in order to influence which implementation is used in a plugin/framework combination that utilizes the jar service mechanism for lookups. If multiple of these sorts of plugins are in play, this would be a logical thing to attempt, since it centralizes configuration of the component implementation you want to use. Since plexus-utils is included in the classpath of the above example (or, could be injected into the classpath of any zero-dependency library without exceeding 2 total artifacts), this will result in plexus-utils or our theoretical library being added directly to the core classloader. In the case of plexus-utils, many many plugins depend on this library, and incompatibility is virtually inevitable with such an old version. Add an extension that specifies a lifecycle mapping and depends on maven-wagon-scm. A user who is not experienced in the nuances of the above rule-set may create a new lifecyle mapping and associated artifact handler to deal with his special type of project. If the lifecycle mapping refers to a plugin that depends on wagon-scm to do its job, it is logical that wagon-scm be added as a dependency of the extension that declares the lifecycle mapping, so that the two are always added at the same time...thereby reducing the chance of human error where one is added but the other is not. In this case, since the extension contains a lifecycle mapping, it entire classpath will be added to the core classloader...including maven-scm itself. If the version of maven-scm used by wagon-scm is old, the chances are good that this addition will eliminate the possibility that the mavenrelease-plugin can be used to release the project. Appearance of Inconsistency from User's Perspective Since the rules laid out above will allow certain component definitions to escape into the core classloader while blocking others, the user who adds build extensions with the hope of accessing the custom components defined within will find the behavior of Maven 2.0.x wonky at best. Particularly in the case of the 2-artifact rule, without specific knowledge of the logic encoded in the 2.0.x ExtensionManager, the use of build extensions will seem like a trial-and-error process for each new extension added to the build. All Extensions Available to All Projects: Potential for Inconsistent Builds Besides the appearance that the Maven 2.0.x extension mechanism works only sometimes (depending on what you try to do with it, of course), it also introduces yet another inconsistency into Maven's build functionality, depending on whether the build is a multimodule or single-project execution. This arises from the fact that Maven relegates all multi-artifact build extensions into a single child PlexusContainer instance, regardless of how many projects are in the current reactor. This opens up the possibility that one project's extensions can pollute another project's build when the two are processed as part of the same multimodule build, while they would each build successfully if built individually. For example, suppose a top-level project T lists two modules, project A and project B, in that order. Project A declares a build extension of wagonfoo-1.0, and project B declares a build extension of wagon-foo-1.1. Individually, builds for both project A and project B will complete successfully. However, when project T is built, things change. Project A's build extension - wagon-foo gets loaded into the extension container, as A's build eventually completes successfully. When project B builds, its build extension - wagon-foo is also loaded, but is farther down the classpath list than wagon-foo-1.0, so wagon-foo-1.0 has classloader priority. If wagon-foo-1.0 is incompatible with project B's build, project B's build will fail...but ONLY in this multimodule scenario. Building B by itself again will still yield success. NOTE: Other examples of this sort of incompatibility can be found by considering two projects that use two different lifecycle mappings and/or artifact handlers for the same packaging type. Admittedly, these are rare concerns, but the global nature of the extension container has great potential to cause all sorts of problems in multimodule builds that don't exist in single-project builds. Goals and Priorities for Refactoring Top-Priority Goals Plugin Loading Allow multiple versions of a plugin to coexist in the same build runtime Allow multiple plugin-level dependency specifications for the same plugin to coexist in the same build runtime Extension Loading Allow extensions with an arbitrary number of dependencies to give plugins access to the components they provide Never inject extension-dependency classes into the core classloader; eliminate the possibility that extensions might cause compatibility problems with certain plugins like maven-release-plugin

4 Other Goals Extensions should only be available to the project that declared them (NOTE: inheritance may mean that parent-pom declarations are present in the project's extension list as well) Enable fine-grained control over additional classes and especially interfaces that are made accessible to the project (and its plugin executions) from a build extension Enable functional parity between build extensions and plugins with the extensions flag == true. Maven 2.1.x Design Principles 1. Extensions (and Plugins with Extensions == true): Each extension should have its own isolated classloader that inherits from the core Maven classloader. Extension classloaders should be keyed (for lookup and reuse) by the extension coordinate ({groupid, artifactid, version}). 2. Projects: Each project that contains either build extensions or a plugin that uses the extensions flag should have its own classloader that inherits from the Maven core classlaoder. This project-specific classloader should be keyed (for later lookup) by the project coordinate (again, {groupid, artifactid, version}). These project-specific classloaders are primarily orchestration points where a restricted set of extension classes can be imported from the isolated extension realm mentioned above. 3. Plugins: Each plugin should have its own classloader that does not inherit from the core Maven classloader. Plugin classloaders should be keyed (for lookup and reuse as successive mojos execute) using both the plugin's coordinate ({groupid, artifactid, version}) and a hash of the coordinates of all first-level dependencies for that plugin, including plugin-level dependencies. Parent classloaders for the plugin's classloader should be assigned to just before and nullified just after a plugin executes, to allow flexibility for use with different project-specific classloaders, and to avoid any pollution from previous executions into successive ones. Foundational Work Some key elements in Maven's dependency libraries have been overhauled since the versions used in 2.0.x, which provide crucial functionality for the 2.1.x plugin- and extension-loading refactor: Critical Classworlds (and Classworlds Exposure) Changes Starting in plexus-container-default version 1.0-alpha-16, the underlying classworlds implementation was overhauled. Additionally, PlexusContainer itself was overhauled, with the new version allowing much better control over which ClassRealms were used to load components. Now, the container tracks which realm is used to load which components, and allows the user to set a global "lookup realm" to be used as the main realm for accessing components during subsequent lookup calls. The container also allowed specification of a lookup realm for each lookup method call. All of this had the effect that subsets of the realms available to a container instance could be isolated for looking up components at different points in the calling code, which amounts to much finer-grained control over classloading in the container instance. Critical Plexus (plexus-container-default) Changes Starting with the release of plexus-container-default version 1.0-alpha-35, the PlexusContainer interface was extended one step further to allow even better control over the realms available for component-loading from the container instance. This new method, removecomponentrealm(..), allows the calling code to trigger the separation of a ClassRealm instance from the container. The separation process entails disposing all components from the realm in question, then removing all traces of the realm from the various container- and component-state managers in the system. This new feature allows long-lived Plexus applications to pare down the realms in play to only those that are still active. As an example usage, the MavenEmbedder now takes advantage of this feature by clearing out all plugin, project, and extension ClassRealm instances after a build completes, thereby freeing significant memory resources for the next execution. This was a crucial addition for those who embed Maven in other applications, such as IDEs, since it eliminated what was in effect a memory leak tied to plugin- and extension-loading that had a history all the way back to Maven 2.0. Implementation Details New Components MavenRealmManager: This is a new component introduced to the maven-project project (this just happens to be the lowest-commondenominator location where it could be added; it's not here because of some natural grouping with other maven-project functionality). It's primary responsibility is managing the inter-classrealm relationships (read: class imports) between plugins, extensions, and projectspecific orchestration realms. Currently, the realm-manager also implements extension-component discovery logic to determine the restricted set of classes that should be imported from build-extension realms into the project-specific realm. Imported classes are available for use in plugins and the core system alike.

5 ModelLineageBuilder: This is another new component introduced to the maven-project project. Its function is to construct a hierarchy of primitive Model instances for each project in the build, to allow the ExtensionScanner (below) to examine the hierarchy for build extensions and the like before project-building takes place. This lineage builder is also used to construct the project instance itself within the MavenProjectBuilder component now. ExtensionScanner: This is a new component introduced to the maven-core project. Its responsibility is to scan through the hierarchies of primitive POM models that represent the projects in the current reactor, and look for both build extensions and plugins with the extensions flag set to true. It then hands these declarations off to the ExtensionManager, along with information about the project coordinate that declared them, for inclusion in the project-specific ClassRealm. The ExtensionScanner executes as early as possible in the Maven initialization process - which is just prior to MavenProject-instance building - so that extension components can be made available to as many core components as possible...notably custom ArtifactHandlers for the project-builder. ExtensionManager Changes As always, the ExtensionManager is responsible for resolving and managing access to build extensions for the rest of the Maven runtime. However, in 2.1.x the strategies used for extension management have changed significantly. First, the global extension container has been discontinued. Second, the three-tiered rule set used to determine where in the classloader hierarchy different extensions would be loaded has been removed. Now, build extensions are tracked for exposure to the runtime according to what project they're associated with. As outlined above in the Principles Section, each extension gets its own ClassRealm instance keyed by its coordinate, and only a restricted set of classes from the extension are actually exposed to the runtime through the project-specific ClassRealm instance used for orchestration. This all happens inside the MavenRealmManager, with extension resolution happening in the ExtensionManager itself. Currently, only the implementation classes of those components defined in the extension artifact itself are imported into the project realm, with all other classes remaining in the isolated extension ClassRealm, available for use only by component instances that come from that realm. Extension ClassRealm instances are never duplicated. Instead, the ExtensionManager checks for the existence of a realm for the extension artifact before resolving it; if the realm already exists, the ExtensionManager reuses it by re-importing the aforementioned class set into the new project realm (keyed to the current project declaring it). Therefore, two projects declaring the same build extension will actually share the same extension ClassRealm (and, depending on instantiation strategies used for components within, possibly even the same component instances). Plugins that use the extensions flag are treated in much the same way within the ExtensionManager, with some notable differences. First, since the declaration in question comes from the plugins section of the POM, it's possible that there is no version defined. This means that the ExtensionManager must first delegate to the PluginManager to have the plugin loaded, so as to reuse the loading logic used for other plugins and avoid inconsistencies. The PluginManager requires a MavenProject instance and an Artifact instance in order to do this, so the ExtensionManager actually uses the primitive Model parameter that was passed in to create a dummy MavenProject instance, then uses an ArtifactFactory component to create an Artifact for the plugin, before calling the PluginManager.verifyPlugin(..) method. One side effect of this approach is that two ClassRealms are actually created for the plugin with extensions == true: one in the PluginManager, which will be used to execute the plugin, and another in the ExtensionManager, to allow importing extension components into the project realm. NOTE: While it's possible that such duplication of realm tracking for plugins with extensions could conceivably lead to problems - like ClassCastException - where the class is loaded from both the extension and plugin realms, the chances of this are vanishingly small, particularly when you consider that only component-implementation classes are currently exposed from the extension realm. Tidying Up The final notable change for 2.1.x is implemented in the MavenEmbedder. As describe briefly in the Foundational Work section above, the embedder now cleans up after itself after each execution, by prompting the removal of all plugin, extension, and project realms from the core container. This effective erases any modifications made to the Maven runtime for the purposes of the completed build, leaving a clean system for subsequent executions. The actual call is to MavenExecutionRequest.clearAccumulatedBuildState(), which cascades through MavenRealmManager.clear(), on to PlexusContainer.removeComponentRealm(..) (which is called for each realm tracked by the realm manager). Again, since ClassRealm instances tend to consume a relatively large chunk of memory, this is a significant step toward making the embedder usable in long-lived processes such as IDEs. Existing Issues / Areas for Improvement While all of the issues outlined below have the potential to cause counter-intuitive build failures, those marked as merely IMPORTANT are considered edge cases that should not affect a wide spectrum of users. [CRITICAL] Plugin Extensions and POM Inheritance Plugins that use the extensions flag could conceivably cause issues for the ExtensionManager, since their coordinate information (most notably, their version) can be inherited from parent POMs or injected from a pluginmanagement section of the POM. Additionally, plugin-level dependencies may be inherited or injected in a similar fashion. Currently, I'm not entirely confident that these use cases have been covered in tests. If they are broken, some additional logic will be required to ensure some minimal inheritance and managed-data injection take place before the extension plugin is initialized. [CRITICAL] Plugins with extensions flag and plugin-level dependencies will experience the same firstcome-first-served behavior as all plugins did in Maven 2.0.x.

6 One possible solution to this is to simply adopt the same realm key algorithm used in non-extension plugins currently in 2.1.x, though the GOTCHA about inheritance and injection of plugin information still applies here. [IMPORTANT] Support builds that specify interproject extension references I think this issue creates a backward-compatibility problem from 2.0.x, though I can't find a test that verifies it. The simplest example of this issue goes as follows: top-level project T specifies modules for project A and project B. Project B uses project A as a build extension. None of these artifacts exists in the Maven repository. Building from T should complete successfully. Currently, since all extensions are discovered in the pre-scanning step prior to project instantiation, the build would fail with an ArtifactNotFoundException, since A is not in the repository and Maven doesn't know that it exists in the current reactor, or how to put off the extension-loading step for B until A's build completes. Since extension-scanning happens even before the first MavenProject instance is constructed, the project-set for the current build has not been established, much less sorted. This means it's currently impossible to know whether an extension (or plugin with an active extensions flag) is part of the current build. Without even considering this, the current extension-scanning process simply attempts to load the extension (or plugin) out of the repository. One potential solution for this problem would involve deferring extension scanning (or repeating it, with suppression of failures the first time around) until after project A's build completes. Then, load the extensions for project B just before attempting to build it. This should allow Maven to find A among the projects in the reactor, and use the newly minted artifact from that build as an extension in B. This approach uses the natural strengths of the project-sorter used to determine the build order under normal circumstances, and should allow Maven to give preference to artifacts from the reactor even when they also exist in the repository. The deferral approach would probably require us to build up a tree of project coordinates in the current build (which we should be able to do through the model-traversal logic in the extension-scanning process), then sort that tree into a graph of interdependencies before loading any extensions at all. Then, for any declared extensions or extension-plugins that are in the graph, we would defer loading that extension until just prior to building the project that uses it. One important drawback with this approach involves profile activation. In order to build up a full list of project coordinates for the current build, we may need some extensions to be loaded in order to gain access to modules defined in profiles (so we can add them to the project-coordinate list and then recurse to their own modules). This creates a delicate balancing act of when to load different parts of the project information, in order to gain access to extensions as early in the process as possible. Aside from the potential for chicken-and-egg situations, deferred extension loading would also mean that extension loading would be a two-stage process. First is the existing pre-scanning process, where most extensions will be identified and loaded. Following this is a second round of extension loading just before the build for that project begins, since it's assumed that project-sorting will have demanded that the extension be built ahead of its dependent. Also, it's not clear how aggregator plugins might derail this logic, since they need access to all project instances when they execute. Another drawback of this approach is that it would negate a lot of the fail-fast behavior built into the current Maven, by deferring extension loading - and by extension, project instantiation for B - until after other projects have built...and some project builds are very time consuming. [IMPORTANT] Modules defined in POM profiles are not scanned for extensions In cases where profiles are used to change the behavior of builds on the broadest scales (the ServiceMix around SVN revid: is a great example of this), profiles are often used to switch between two completely separate sets of modules, with no modules defined in the root of the POM itself. When applying the current 2.1 extension-loading design to this scenario, none of the modules are currently scanned for extensions or plugins with an active extensions flag. A potential solution would be to activate what profiles we can in the model before grabbing the modules-list to continue the extension-scanning process. I say "what profiles we can" because it's possible that custom profile activators may be used in some of the profiles; in this case, we must take extra care to either: avoid exceptions when these custom activators are used, but haven't yet been loaded (in case we cannot load them first) or, better yet: make sure any custom profile activators used by the current POM are loaded before the profiles are activated, to ensure all intended profile activation can take place. [IMPORTANT] Plugins defined in POM profiles with an active extensions flag will not be loaded as extensions This situation is very similar to that outlined in the section above, where the module-list scanned for extensions is incorrect due to some modules being defined in profiles. Likewise, plugins with extensions == true could be defined in profiles, and currently Maven would fail to find them during the extension-scanning process. Fixes for this will likely be the same as the above. [IMPORTANT] Allow extension authors to specify which classes should be imported into project realms In cases where the extension classpath is 2 or fewer artifacts, or the extension provides a lifecycle mapping, the current extension-loading mechanism in 2.1.x breaks backward compatibility. In such cases, 2.0.x loads the entire extension classpath is exposed to the Maven runtime for use in plugins or the core itself. By limiting class imports into the project realm to only component-implementation classes, Maven 2.1.x currently eliminates the possibility of accessing a component by a custom interface defined in the extension (through casting). It also prohibits access to

7 components defined in dependencies of the extension artifact, since these dependency artifacts are not scanned for component definitions. Finally, anything else, such as custom datatypes, will also be isolated behind the extension-realm barrier. In certain cases, extension developers need to provide more access to their components than just the interface from the core realm and the implementation class itself. This suggests something similar to OSGi, that would allow developers to specify a manifest of the classes exported, along with dependencies used, by the extension. Perhaps a bundling mechanism could provide these semantics. In any case, this is an issue that will be expanded in a separate proposal: Maven 2.1 Extension Bundling.

MAVEN INTERVIEW QUESTIONS

MAVEN INTERVIEW QUESTIONS MAVEN INTERVIEW QUESTIONS http://www.tutorialspoint.com/maven/maven_interview_questions.htm Copyright tutorialspoint.com Dear readers, these Maven Interview Questions have been designed specially to get

More information

I Got My Mojo Workin'

I Got My Mojo Workin' I Got My Mojo Workin' Gary Murphy Hilbert Computing, Inc. http://www.hilbertinc.com/ glm@hilbertinc.com Gary Murphy I Got My Mojo Workin' Slide 1 Agenda Quick overview on using Maven 2 Key features and

More information

Maven 2.1 Artifact Resolution Specification

Maven 2.1 Artifact Resolution Specification Maven 2.1 Artifact Resolution Specification Notes to work out in later sections: Graph-based artifact resolution Decouple from Maven's core Binary graph that is pre-resolved for a POM Artifacts should

More information

Authentication with OAuth 2.0

Authentication with OAuth 2.0 Authentication with OAuth 2.0 The OAuth 2.0 specification defines a delegation protocol that is useful for conveying authorization decisions across a network of web-enabled applications and APIs. OAuth

More information

sites</distribsiteroot>

sites</distribsiteroot> Maven Parent POMs What is this? We have several parent poms. They pre-configure a whole array of things, from plugin versions to deployment on our infrastructure. They should be used: By all public and

More information

1.2. Name(s) and address of Document Author(s)/Supplier: Sahoo: 1.3. Date of This Document: 12 July 2008

1.2. Name(s) and  address of Document Author(s)/Supplier: Sahoo: 1.3. Date of This Document: 12 July 2008 01234567890123456789012345678901234567890123456789012345678901234567890123456789 1. Introduction 1.1. Project/Component Working Name: Modularization of GlassFish using OSGi 1.2. Name(s) and e-mail address

More information

Maven 2 & Continuum. by Trygve Laugstøl

Maven 2 & Continuum. by Trygve Laugstøl Maven 2 & Continuum by Trygve Laugstøl Agenda About Maven Maven 2 Highlights Changes The POM Project layout Plugin architecture Continuum About Maven It s a different kind of build

More information

IBM Best Practices Working With Multiple CCM Applications Draft

IBM Best Practices Working With Multiple CCM Applications Draft Best Practices Working With Multiple CCM Applications. This document collects best practices to work with Multiple CCM applications in large size enterprise deployment topologies. Please see Best Practices

More information

MITOCW watch?v=w_-sx4vr53m

MITOCW watch?v=w_-sx4vr53m MITOCW watch?v=w_-sx4vr53m The following content is provided under a Creative Commons license. Your support will help MIT OpenCourseWare continue to offer high-quality educational resources for free. To

More information

Modular Java Applications with Spring, dm Server and OSGi

Modular Java Applications with Spring, dm Server and OSGi Modular Java Applications with Spring, dm Server and OSGi Copyright 2005-2008 SpringSource. Copying, publishing or distributing without express written permission is prohibit Topics in this session Introduction

More information

6.001 Notes: Section 15.1

6.001 Notes: Section 15.1 6.001 Notes: Section 15.1 Slide 15.1.1 Our goal over the next few lectures is to build an interpreter, which in a very basic sense is the ultimate in programming, since doing so will allow us to define

More information

Tuscany: Applying OSGi modularity after the fact

Tuscany: Applying OSGi modularity after the fact Tuscany: Applying OSGi modularity after the fact Luciano Resende lresende@apache.org http://lresende.blogspot.com Raymond Feng rfeng@apache.org Agenda Introduction and Motivation Status of current Tools

More information

SCA Java Runtime Overview

SCA Java Runtime Overview SCA Java Runtime Overview Software Organization Source Code Locations If you take a Tuscany SCA Java source distribution or look in the Tuscany subversion repository (http://svn.apache.org/repos/asf/tuscany/java/sc

More information

Making do with less: Emulating Dev/Test/Prod and Creating User Playpens in SAS Data Integration Studio and SAS Enterprise Guide

Making do with less: Emulating Dev/Test/Prod and Creating User Playpens in SAS Data Integration Studio and SAS Enterprise Guide Paper 419 2013 Making do with less: Emulating Dev/Test/Prod and Creating User Playpens in SAS Data Integration Studio and SAS Enterprise Guide David Kratz, d-wise Technologies ABSTRACT Have you ever required

More information

TOP REASONS WHY YOU SHOULD SWITCH TO MAVEN 3

TOP REASONS WHY YOU SHOULD SWITCH TO MAVEN 3 TOP REASONS WHY YOU SHOULD SWITCH TO MAVEN 3 Dennis Lundberg C O N N E C T I N G B U S I N E S S & T E C H N O L O G Y DENNIS LUNDBERG Systems Architect Java since 1996 Maven PMC member since 2006 Maven

More information

Utilizing Fast Testing to Transform Java Development into an Agile, Quick Release, Low Risk Process

Utilizing Fast Testing to Transform Java Development into an Agile, Quick Release, Low Risk Process Utilizing Fast Testing to Transform Java Development into an Agile, Quick Release, Low Risk Process Introduction System tests, often called slow tests, play a crucial role in nearly every Java development

More information

Practical Object-Oriented Design in Ruby

Practical Object-Oriented Design in Ruby Practical Object-Oriented Design in Ruby Anyone that has done a decent amount of programming in Ruby is bound hear about the book Practical Object-Oriented Design in Ruby [1] (http://www.poodr.com/) by

More information

Content Sharing and Reuse in PTC Integrity Lifecycle Manager

Content Sharing and Reuse in PTC Integrity Lifecycle Manager Content Sharing and Reuse in PTC Integrity Lifecycle Manager Author: Scott Milton 1 P age Table of Contents 1. Abstract... 3 2. Introduction... 4 3. Document Model... 5 3.1. Reference Modes... 6 4. Reusing

More information

1: Introduction to Object (1)

1: Introduction to Object (1) 1: Introduction to Object (1) 김동원 2003.01.20 Overview (1) The progress of abstraction Smalltalk Class & Object Interface The hidden implementation Reusing the implementation Inheritance: Reusing the interface

More information

SDC Design patterns GoF

SDC Design patterns GoF SDC Design patterns GoF Design Patterns The design pattern concept can be viewed as an abstraction of imitating useful parts of other software products. The design pattern is a description of communicating

More information

CS02b Project 2 String compression with Huffman trees

CS02b Project 2 String compression with Huffman trees PROJECT OVERVIEW CS02b Project 2 String compression with Huffman trees We've discussed how characters can be encoded into bits for storage in a computer. ASCII (7 8 bits per character) and Unicode (16+

More information

6.001 Notes: Section 8.1

6.001 Notes: Section 8.1 6.001 Notes: Section 8.1 Slide 8.1.1 In this lecture we are going to introduce a new data type, specifically to deal with symbols. This may sound a bit odd, but if you step back, you may realize that everything

More information

Type Checking and Type Equality

Type Checking and Type Equality Type Checking and Type Equality Type systems are the biggest point of variation across programming languages. Even languages that look similar are often greatly different when it comes to their type systems.

More information

CS5412: TRANSACTIONS (I)

CS5412: TRANSACTIONS (I) 1 CS5412: TRANSACTIONS (I) Lecture XVII Ken Birman Transactions 2 A widely used reliability technology, despite the BASE methodology we use in the first tier Goal for this week: in-depth examination of

More information

Sparqube Lookup Column

Sparqube Lookup Column Sparqube Lookup Column Contents Overview... 2 Features... 3 Setup... 4 Requirements... 4 Installation... 4 Licensing... 4 Configuration... 9 Lookup column types... 9 Adding Sparqube Lookup Classic to SharePoint

More information

KMyMoney Transaction Matcher

KMyMoney Transaction Matcher KMyMoney Transaction Matcher Ace Jones Use Cases Case #1A: Matching hand-entered transactions manually I enter a transaction by hand, with payee, amount, date & category. I download

More information

Managing Application Configuration Data with CIM

Managing Application Configuration Data with CIM Managing Application Configuration Data with CIM Viktor Mihajlovski IBM Linux Technology Center, Systems Management Introduction The configuration of software, regardless whether

More information

Classloader J2EE rakendusserveris (Bea Weblogic Server, IBM WebSphere)

Classloader J2EE rakendusserveris (Bea Weblogic Server, IBM WebSphere) Tartu Ülikool Matemaatika-informaatika Teaduskond Referaat Classloader J2EE rakendusserveris (Bea Weblogic Server, IBM WebSphere) Autor: Madis Lunkov Inf II Juhendaja: Ivo Mägi Tartu 2005 Contents Contents...

More information

Creating Reports using Report Designer Part 1. Training Guide

Creating Reports using Report Designer Part 1. Training Guide Creating Reports using Report Designer Part 1 Training Guide 2 Dayforce HCM Creating Reports using Report Designer Part 1 Contributors We would like to thank the following individual who contributed to

More information

BIG MODELS AN ALTERNATIVE APPROACH

BIG MODELS AN ALTERNATIVE APPROACH 2. BIG MODELS AN ALTERNATIVE APPROACH Whitepaper Eclipse Summit 2008 Modeling Symposium Jos Warmer, Ordina (jos.warmer@ordina.nl) Abstract Scaling up modeling within project runs into many practical problems.

More information

Maven in the wild. An introduction to Maven

Maven in the wild. An introduction to Maven Maven in the wild An introduction to Maven Maven gone wild!! An introduction to Maven Presentation Summary An overview of Maven What Maven provides? Maven s principles Maven s benefits Maven s features

More information

CS 221 Review. Mason Vail

CS 221 Review. Mason Vail CS 221 Review Mason Vail Inheritance (1) Every class - except the Object class - directly inherits from one parent class. Object is the only class with no parent. If a class does not declare a parent using

More information

Some Notes on Metadata Interchange

Some Notes on Metadata Interchange Some Notes on Metadata Interchange Ian A. Young V2, 3-Sep-2008 Scope These notes describe my position on the issue of metadata interchange between SAML federations. I try and lay out some terminology and

More information

Sonatype CLM - IDE User Guide. Sonatype CLM - IDE User Guide

Sonatype CLM - IDE User Guide. Sonatype CLM - IDE User Guide Sonatype CLM - IDE User Guide i Sonatype CLM - IDE User Guide Sonatype CLM - IDE User Guide ii Contents 1 Introduction 1 2 Installing Sonatype CLM for Eclipse 2 3 Configuring Sonatype CLM for Eclipse 5

More information

Who am I? I m a python developer who has been working on OpenStack since I currently work for Aptira, who do OpenStack, SDN, and orchestration

Who am I? I m a python developer who has been working on OpenStack since I currently work for Aptira, who do OpenStack, SDN, and orchestration Who am I? I m a python developer who has been working on OpenStack since 2011. I currently work for Aptira, who do OpenStack, SDN, and orchestration consulting. I m here today to help you learn from my

More information

PROFESSOR: Last time, we took a look at an explicit control evaluator for Lisp, and that bridged the gap between

PROFESSOR: Last time, we took a look at an explicit control evaluator for Lisp, and that bridged the gap between MITOCW Lecture 10A [MUSIC PLAYING] PROFESSOR: Last time, we took a look at an explicit control evaluator for Lisp, and that bridged the gap between all these high-level languages like Lisp and the query

More information

Topics in Object-Oriented Design Patterns

Topics in Object-Oriented Design Patterns Software design Topics in Object-Oriented Design Patterns Material mainly from the book Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides; slides originally by Spiros Mancoridis;

More information

MIGRATION GUIDE DIGITAL EXPERIENCE MANAGER 7.2

MIGRATION GUIDE DIGITAL EXPERIENCE MANAGER 7.2 1 SUMMARY 1 INTRODUCTION... 4 2 HOW TO UPGRADE FROM DIGITAL EXPERIENCE MANAGER 7.1 TO 7.2... 5 2.1 Code base review and potential impacts... 5 2.2 Deployment scripts/procedure review... 5 2.3 Test environment

More information

When Java technology burst onto the Internet scene in 1995,

When Java technology burst onto the Internet scene in 1995, MOBILE CODE SECURITY SECURE JAVA CLASS LOADING The class loading mechanism, LI GONG Sun Microsystems central to Java, plays a key role in JDK 1.2 by enabling When Java technology burst onto the Internet

More information

Make sure you have the latest Hive trunk by running svn up in your Hive directory. More detailed instructions on downloading and setting up

Make sure you have the latest Hive trunk by running svn up in your Hive directory. More detailed instructions on downloading and setting up GenericUDAFCaseStudy Writing GenericUDAFs: A Tutorial User-Defined Aggregation Functions (UDAFs) are an excellent way to integrate advanced data-processing into Hive. Hive allows two varieties of UDAFs:

More information

Cloud-Native Applications. Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version 1.0

Cloud-Native Applications. Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version 1.0 Cloud-Native Applications Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version 1.0 Cloud-Native Characteristics Lean Form a hypothesis, build just enough to validate or disprove it. Learn

More information

DESIGN PATTERN - INTERVIEW QUESTIONS

DESIGN PATTERN - INTERVIEW QUESTIONS DESIGN PATTERN - INTERVIEW QUESTIONS http://www.tutorialspoint.com/design_pattern/design_pattern_interview_questions.htm Copyright tutorialspoint.com Dear readers, these Design Pattern Interview Questions

More information

Chapter 9. Software Testing

Chapter 9. Software Testing Chapter 9. Software Testing Table of Contents Objectives... 1 Introduction to software testing... 1 The testers... 2 The developers... 2 An independent testing team... 2 The customer... 2 Principles of

More information

CS61A Notes Week 1A: Basics, order of evaluation, special forms, recursion

CS61A Notes Week 1A: Basics, order of evaluation, special forms, recursion CS61A Notes Week 1A: Basics, order of evaluation, special forms, recursion Assorted Scheme Basics 1. The ( is the most important character in Scheme. If you have coded in other languages such as C or Java,

More information

WACC Report. Zeshan Amjad, Rohan Padmanabhan, Rohan Pritchard, & Edward Stow

WACC Report. Zeshan Amjad, Rohan Padmanabhan, Rohan Pritchard, & Edward Stow WACC Report Zeshan Amjad, Rohan Padmanabhan, Rohan Pritchard, & Edward Stow 1 The Product Our compiler passes all of the supplied test cases, and over 60 additional test cases we wrote to cover areas (mostly

More information

Using JBI for Service-Oriented Integration (SOI)

Using JBI for Service-Oriented Integration (SOI) Using JBI for -Oriented Integration (SOI) Ron Ten-Hove, Sun Microsystems January 27, 2006 2006, Sun Microsystems Inc. Introduction How do you use a service-oriented architecture (SOA)? This is an important

More information

CS103 Spring 2018 Mathematical Vocabulary

CS103 Spring 2018 Mathematical Vocabulary CS103 Spring 2018 Mathematical Vocabulary You keep using that word. I do not think it means what you think it means. - Inigo Montoya, from The Princess Bride Consider the humble while loop in most programming

More information

Lecture 10 Notes Linked Lists

Lecture 10 Notes Linked Lists Lecture 10 Notes Linked Lists 15-122: Principles of Imperative Computation (Spring 2016) Frank Pfenning, Rob Simmons, André Platzer 1 Introduction In this lecture we discuss the use of linked lists to

More information

What s new in IBM Operational Decision Manager 8.9 Standard Edition

What s new in IBM Operational Decision Manager 8.9 Standard Edition What s new in IBM Operational Decision Manager 8.9 Standard Edition Release themes User empowerment in the Business Console Improved development and operations (DevOps) features Easier integration with

More information

Chapter 1 Getting Started

Chapter 1 Getting Started Chapter 1 Getting Started The C# class Just like all object oriented programming languages, C# supports the concept of a class. A class is a little like a data structure in that it aggregates different

More information

A novel design for maximum use of public IP Space by ISPs one IP per customer

A novel design for maximum use of public IP Space by ISPs one IP per customer A novel design for maximum use of public IP Space by ISPs one IP per customer 6/20/2018 Jim McNally, James Lopeman Plusten Mark Steckel Citywisper Abstract This paper outlines a new design for ISP networks

More information

Outline for Today. How can we speed up operations that work on integer data? A simple data structure for ordered dictionaries.

Outline for Today. How can we speed up operations that work on integer data? A simple data structure for ordered dictionaries. van Emde Boas Trees Outline for Today Data Structures on Integers How can we speed up operations that work on integer data? Tiered Bitvectors A simple data structure for ordered dictionaries. van Emde

More information

Supporting Class / C++ Lecture Notes

Supporting Class / C++ Lecture Notes Goal Supporting Class / C++ Lecture Notes You started with an understanding of how to write Java programs. This course is about explaining the path from Java to executing programs. We proceeded in a mostly

More information

Maven POM project modelversion groupid artifactid packaging version name

Maven POM project modelversion groupid artifactid packaging version name Maven The goal of this document is to introduce the Maven tool. This document just shows some of the functionalities of Maven. A complete guide about Maven can be found in http://maven.apache.org/. Maven

More information

Product Release Notes Alderstone cmt 2.0

Product Release Notes Alderstone cmt 2.0 Alderstone cmt product release notes Product Release Notes Alderstone cmt 2.0 Alderstone Consulting is a technology company headquartered in the UK and established in 2008. A BMC Technology Alliance Premier

More information

An aside. Lecture 14: Last time

An aside. Lecture 14: Last time An aside Lecture 14: Recall from last time that aggregate() allowed us to combine data that referred to the same building; it is possible to implement this with lower-level tools in R Similarly, our dance

More information

6.001 Notes: Section 1.1

6.001 Notes: Section 1.1 6.001 Notes: Section 1.1 Slide 1.1.1 This first thing we need to do is discuss the focus of 6.001. What is this course all about? This seems quite obvious -- this is a course about computer science. But

More information

It Might Be Valid, But It's Still Wrong Paul Maskens and Andy Kramek

It Might Be Valid, But It's Still Wrong Paul Maskens and Andy Kramek Seite 1 von 5 Issue Date: FoxTalk July 2000 It Might Be Valid, But It's Still Wrong Paul Maskens and Andy Kramek This month, Paul Maskens and Andy Kramek discuss the problems of validating data entry.

More information

Red Hat JBoss Fuse 6.1

Red Hat JBoss Fuse 6.1 Red Hat JBoss Fuse 6.1 Managing OSGi Dependencies How to package applications for OSGi containers Last Updated: 2017-10-12 Red Hat JBoss Fuse 6.1 Managing OSGi Dependencies How to package applications

More information

Socket attaches to a Ratchet. 2) Bridge Decouple an abstraction from its implementation so that the two can vary independently.

Socket attaches to a Ratchet. 2) Bridge Decouple an abstraction from its implementation so that the two can vary independently. Gang of Four Software Design Patterns with examples STRUCTURAL 1) Adapter Convert the interface of a class into another interface clients expect. It lets the classes work together that couldn't otherwise

More information

/633 Introduction to Algorithms Lecturer: Michael Dinitz Topic: Priority Queues / Heaps Date: 9/27/17

/633 Introduction to Algorithms Lecturer: Michael Dinitz Topic: Priority Queues / Heaps Date: 9/27/17 01.433/33 Introduction to Algorithms Lecturer: Michael Dinitz Topic: Priority Queues / Heaps Date: 9/2/1.1 Introduction In this lecture we ll talk about a useful abstraction, priority queues, which are

More information

Agenda. Why OSGi. What is OSGi. How OSGi Works. Apache projects related to OSGi Progress Software Corporation. All rights reserved.

Agenda. Why OSGi. What is OSGi. How OSGi Works. Apache projects related to OSGi Progress Software Corporation. All rights reserved. OSGi Overview freeman.fang@gmail.com ffang@apache.org Apache Servicemix Commiter/PMC member Apache Cxf Commiter/PMC member Apache Karaf Commiter/PMC member Apache Felix Commiter Agenda Why OSGi What is

More information

Wednesday, June 23, JBoss Users & Developers Conference. Boston:2010

Wednesday, June 23, JBoss Users & Developers Conference. Boston:2010 JBoss Users & Developers Conference Boston:2010 Zen of Class Loading Jason T. Greene EAP Architect, Red Hat June 2010 What is the Class class? Represents a class, enum, interface, annotation, or primitive

More information

Announcements. Written Assignment 2 Due Monday at 5:00PM. Midterm next Wednesday in class, 11:00 1:00. Midterm review session next Monday in class.

Announcements. Written Assignment 2 Due Monday at 5:00PM. Midterm next Wednesday in class, 11:00 1:00. Midterm review session next Monday in class. Type-Checking II Announcements Written Assignment 2 Due Monday at 5:00PM. Office hours today, Sunday, and Monday. Ask questions on Piazzza! Email the staff list with questions! Midterm next Wednesday in

More information

Who Moved My Module? 1

Who Moved My Module? 1 Who Moved My Module? 1 About Me Yoav Landman - JFrog s CTO and Co-Founder - Creator of the Artifactory Project - 13 years experience in commercial enterprise build and development environments 2 Agenda

More information

COMP 161 Lecture Notes 16 Analyzing Search and Sort

COMP 161 Lecture Notes 16 Analyzing Search and Sort COMP 161 Lecture Notes 16 Analyzing Search and Sort In these notes we analyze search and sort. Counting Operations When we analyze the complexity of procedures we re determine the order of the number of

More information

6.001 Notes: Section 31.1

6.001 Notes: Section 31.1 6.001 Notes: Section 31.1 Slide 31.1.1 In previous lectures we have seen a number of important themes, which relate to designing code for complex systems. One was the idea of proof by induction, meaning

More information

LESSON 13: LANGUAGE TRANSLATION

LESSON 13: LANGUAGE TRANSLATION LESSON 13: LANGUAGE TRANSLATION Objective Interpreters and Compilers. Language Translation Phases. Interpreters and Compilers A COMPILER is a program that translates a complete source program into machine

More information

MITOCW MIT6_01SC_rec2_300k.mp4

MITOCW MIT6_01SC_rec2_300k.mp4 MITOCW MIT6_01SC_rec2_300k.mp4 KENDRA PUGH: Hi. I'd like to talk to you today about inheritance as a fundamental concept in object oriented programming, its use in Python, and also tips and tricks for

More information

Case study on PhoneGap / Apache Cordova

Case study on PhoneGap / Apache Cordova Chapter 1 Case study on PhoneGap / Apache Cordova 1.1 Introduction to PhoneGap / Apache Cordova PhoneGap is a free and open source framework that allows you to create mobile applications in a cross platform

More information

Instructor: Craig Duckett. Lecture 04: Thursday, April 5, Relationships

Instructor: Craig Duckett. Lecture 04: Thursday, April 5, Relationships Instructor: Craig Duckett Lecture 04: Thursday, April 5, 2018 Relationships 1 Assignment 1 is due NEXT LECTURE 5, Tuesday, April 10 th in StudentTracker by MIDNIGHT MID-TERM EXAM is LECTURE 10, Tuesday,

More information

Q&A Session for Connect with Remedy - CMDB Best Practices Coffee Break

Q&A Session for Connect with Remedy - CMDB Best Practices Coffee Break Q&A Session for Connect with Remedy - CMDB Best Practices Coffee Break Date: Thursday, March 05, 2015 Q: When going to Asset Management Console and making an update on there, does that go to a sandbox

More information

A Routing Table Insertion (RTI) Attack on Freenet

A Routing Table Insertion (RTI) Attack on Freenet A Routing Table Insertion (RTI) Attack on Freenet Technical Report University of Hawaii at Manoa Project Members Todd Baumeister Yingfei Dong Zhenhai Duan Guanyu Tian Date 9/18/2012 1 Table of Contents

More information

6.001 Notes: Section 4.1

6.001 Notes: Section 4.1 6.001 Notes: Section 4.1 Slide 4.1.1 In this lecture, we are going to take a careful look at the kinds of procedures we can build. We will first go back to look very carefully at the substitution model,

More information

Inter-Project Dependencies in Java Software Ecosystems

Inter-Project Dependencies in Java Software Ecosystems Inter-Project Dependencies Inter-Project Dependencies in Java Software Ecosystems in Java Software Ecosystems Antonín Procházka 1, Mircea Lungu 2, Karel Richta 3 Antonín Procházka 1, Mircea Lungu 2, Karel

More information

SOME TYPES AND USES OF DATA MODELS

SOME TYPES AND USES OF DATA MODELS 3 SOME TYPES AND USES OF DATA MODELS CHAPTER OUTLINE 3.1 Different Types of Data Models 23 3.1.1 Physical Data Model 24 3.1.2 Logical Data Model 24 3.1.3 Conceptual Data Model 25 3.1.4 Canonical Data Model

More information

The Actual Real World at EclipseCon/ALM

The Actual Real World at EclipseCon/ALM Tycho The Actual Real World at EclipseCon/ALM Raise your Hand if you are Sure Addressing the Issues Real World: Tycho Issues World Wide Distributed Teams India, China, Europe, Argentina, United States

More information

Radix Searching. The insert procedure for digital search trees also derives directly from the corresponding procedure for binary search trees:

Radix Searching. The insert procedure for digital search trees also derives directly from the corresponding procedure for binary search trees: Radix Searching The most simple radix search method is digital tree searching - the binary search tree with the branch in the tree according to the bits of keys: at the first level the leading bit is used,

More information

Parser Design. Neil Mitchell. June 25, 2004

Parser Design. Neil Mitchell. June 25, 2004 Parser Design Neil Mitchell June 25, 2004 1 Introduction A parser is a tool used to split a text stream, typically in some human readable form, into a representation suitable for understanding by a computer.

More information

MITOCW watch?v=zm5mw5nkzjg

MITOCW watch?v=zm5mw5nkzjg MITOCW watch?v=zm5mw5nkzjg The following content is provided under a Creative Commons license. Your support will help MIT OpenCourseWare continue to offer high quality educational resources for free. To

More information

05. SINGLETON PATTERN. One of a Kind Objects

05. SINGLETON PATTERN. One of a Kind Objects BIM492 DESIGN PATTERNS 05. SINGLETON PATTERN One of a Kind Objects Developer: What use is that? Guru: There are many objects we only need one of: thread pools, caches, dialog boxes, objects that handle

More information

Design Pattern: Composite

Design Pattern: Composite Design Pattern: Composite Intent Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. Motivation

More information

The Microsoft Large Mailbox Vision

The Microsoft Large Mailbox Vision WHITE PAPER The Microsoft Large Mailbox Vision Giving users large mailboxes without breaking your budget Introduction Giving your users the ability to store more email has many advantages. Large mailboxes

More information

What is a multi-model database and why use it?

What is a multi-model database and why use it? What is a multi-model database and why use it? An When it comes to choosing the right technology for a new project, ongoing development or a full system upgrade, it can often be challenging to define the

More information

Page Replacement. (and other virtual memory policies) Kevin Webb Swarthmore College March 27, 2018

Page Replacement. (and other virtual memory policies) Kevin Webb Swarthmore College March 27, 2018 Page Replacement (and other virtual memory policies) Kevin Webb Swarthmore College March 27, 2018 Today s Goals Making virtual memory virtual : incorporating disk backing. Explore page replacement policies

More information

Robust Memory Management Schemes

Robust Memory Management Schemes Robust Memory Management Schemes Prepared by : Fadi Sbahi & Ali Bsoul Supervised By: Dr. Lo ai Tawalbeh Jordan University of Science and Technology Robust Memory Management Schemes Introduction. Memory

More information

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich CSCD01 Engineering Large Software Systems Design Patterns Joe Bettridge Winter 2018 With thanks to Anya Tafliovich Design Patterns Design patterns take the problems consistently found in software, and

More information

Chapter 5 Hashing. Introduction. Hashing. Hashing Functions. hashing performs basic operations, such as insertion,

Chapter 5 Hashing. Introduction. Hashing. Hashing Functions. hashing performs basic operations, such as insertion, Introduction Chapter 5 Hashing hashing performs basic operations, such as insertion, deletion, and finds in average time 2 Hashing a hash table is merely an of some fixed size hashing converts into locations

More information

In further discussion, the books make other kinds of distinction between high level languages:

In further discussion, the books make other kinds of distinction between high level languages: Max and Programming This essay looks at Max from the point of view of someone with a bit of experience in traditional computer programming. There are several questions that come up from time to time on

More information

CHAIN OF RESPONSIBILITY (DP 223)

CHAIN OF RESPONSIBILITY (DP 223) CHAIN OF RESPONSIBILITY (DP 223) Object Behavioral Intent Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects

More information

Service-Oriented Programming

Service-Oriented Programming Service-Oriented Programming by Guy Bieber, Lead Architect, ISD C4I, Motorola ABSTRACT - The Service-Oriented Programming (SOP) model is the most exciting revolution in programming since Object Oriented

More information

UNINFORMED SEARCH. Announcements Reading Section 3.4, especially 3.4.1, 3.4.2, 3.4.3, 3.4.5

UNINFORMED SEARCH. Announcements Reading Section 3.4, especially 3.4.1, 3.4.2, 3.4.3, 3.4.5 UNINFORMED SEARCH Announcements Reading Section 3.4, especially 3.4.1, 3.4.2, 3.4.3, 3.4.5 Robbie has no idea where room X is, and may have little choice but to try going down this corridor and that. On

More information

Application Deployment System Guide Version 8.0 October 14, 2013

Application Deployment System Guide Version 8.0 October 14, 2013 Application Deployment System Guide Version 8.0 October 14, 2013 For the most recent version of this document, visit our developer's website. Table of Contents 1 Application Deployment System 4 1.1 System

More information

Verification, Testing, and Bugs

Verification, Testing, and Bugs Verification, Testing, and Bugs Ariane 5 Rocket First Launch Failure https://www.youtube.com/watch?v=gp_d8r- 2hwk So What Happened? The sequence of events that led to the destruction of the Ariane 5 was

More information

ONOS YANG Tools. Thomas Vachuska Open Networking Foundation

ONOS YANG Tools. Thomas Vachuska Open Networking Foundation ONOS YANG Tools Thomas Vachuska Open Networking Foundation background SDN and Dynamic Control Dynamic control over forwarding plane behaviour from a logically centralized vantage point Configuration and

More information

PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS

PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS Objective PRINCIPLES OF COMPILER DESIGN UNIT I INTRODUCTION TO COMPILERS Explain what is meant by compiler. Explain how the compiler works. Describe various analysis of the source program. Describe the

More information

With IBM BPM 8.5.5, the features needed to express both BPM solutions and case management oriented solutions comes together in one offering.

With IBM BPM 8.5.5, the features needed to express both BPM solutions and case management oriented solutions comes together in one offering. Case Management With the release of IBM BPM 8.5.5, case management capabilities were added to the product. It must be noted that these functions are only available with IBM BPM Advanced and the Basic Case

More information

Optimizing Testing Performance With Data Validation Option

Optimizing Testing Performance With Data Validation Option Optimizing Testing Performance With Data Validation Option 1993-2016 Informatica LLC. No part of this document may be reproduced or transmitted in any form, by any means (electronic, photocopying, recording

More information

Recursively Enumerable Languages, Turing Machines, and Decidability

Recursively Enumerable Languages, Turing Machines, and Decidability Recursively Enumerable Languages, Turing Machines, and Decidability 1 Problem Reduction: Basic Concepts and Analogies The concept of problem reduction is simple at a high level. You simply take an algorithm

More information

Tuesday, April 26, 2011

Tuesday, April 26, 2011 Modular Class Loading With JBoss Modules David M. Lloyd Senior Software Engineer, Red Hat, Inc. The Class Path is Dead - Mark Reinhold, 2009 What does this mean? The limitations inherent in -classpath

More information