Grails Multiple Applications as Plugins - plugins

I need a bit of clarity regarding whats possible with grails plugins before committing my self to a corner a month or two down the line,
We have two applications built in Grails what share the same model, however we are looking at creating a single application which will control the ACL and add the two Grails applications as plugins.
Now the two applications are very extensive and they have their own controllers, views and routing.
Is it still viable to integrate the two applications as grails plugins or is there another better way of doing it. In the past I have found that following a quick simple guide / tutorial on how to create a grails plugin for instance, might not really explain the other issues I might encounter as I take the two big applications which use plugins of their own and try to convert them to plugins...
Any heads up information would be appreciated.

Everyone's needs are different. I'll simply explain what we've done on a current project and then you can use that to help make your decision.
We have a "common" grails plugin. This plugin contains all of our domains, controllers, layouts, views, css, images, and js that are shared throughout our grails applications. The common plugin has the spring-security-core plugin installed since the security domains are, well, common to all the other applications. However, each application that uses are common plugin still specifies its own security. It uses the domains from common as well as the spring-security-core plugin installed in common, but each application can control its own access points and lock down the URLs that need locked down.
We have an admin application
We have a customer facing application which has both secured and un-secure content.
And we have a couple other internal only applications that use our common plugin.
We've been at this for 6 months and haven't noticed any drawbacks to this approach.

Related

Flutter: What is best practice for how to configure/build multiple apps that use a single private "core" library/package?

I've done a fair bit of searching here and elsewhere, but haven't found a clear answer...
I have two apps which will share considerable functionality and access the same cloud data, but are still quite distinct. A similar public example that comes to mind is Uber: one app for the driver, one app for the rider. They apps share a lot of core functionality. I think it does not makes sense to have one monolithic app that presents two significantly different UXs and sets of functionality based on the type of user... Or does it?? What are the main advantages/disadvantages to this approach?
I'm not totally sure, but to me it seems more sensible to have two separate apps which import a "core" library that contains the elements common to both apps (some data models, some UI widgets, etc.). How does one build the two apps in such a situation? Can I build both from a single Flutter project, or do I need separate projects for each app?
If building from a single project, how does one configure it to build two different apps?
(Using flavors doesn't seem appropriate for this; I am already building multiple flavors for each app: DEV/TEST/PROD)
If building from separate projects, it seems that it should be simple to have an additional (third) separate project for the core library, which can be built/saved to a private GitHub repo. I have read that putting the core library in a separate repo can be problematic/inconvenient due to how pub caches packages. Is this still true? Is it as simple as specifying separate folders in the single repo for the three different projects? Are there other things to consider with this configuration?
The solution I arrived at was to use the melos package to set up my project in a mono-repo.
This allows me to have separate top-level directories (within my project/repo) for each of my apps and for each of my libraries. A top-level configuration file for melos lists each of them, and melos enables the libraries to be 'visible' to the apps. It's a slick and simple solution that met my needs.
We can use melos for the early stage of development. But when there is more than one app reusing the same modules, we need to use multiple repos. We can use git reference or we can use unpub

Separate install per project? suiteCRM, sugarCRM

Company has projects each of which have their own accounts, opportunities and contacts.
Each project is self contained. So if I'm working in project (A), I don't need to see any elements from project (B).
I'm not sure how to achieve this. Separate sugarCRM install per project?
If they are completely self-contained, and the number of projects will not change frequently then two separate instanced could indeed make sense, especially if the projects will need different CRM customizations and have different users. If there are users that work with both projects, you could maybe add some solution that shares the login session across both CRM instances (e.g. single sign-on) for convenience reasons. I don't know if there are good solutions for that available.
If you however decide to use a single CRM for both projects, I only see those options:
Use Team Security to control which record can be seen/accessed by which teams->users (a.k.a. row level security). This is a built-in feature in commercial versions of Sugar. For SugarCRM CE and SuiteCRM there appear to be similar 3rd party plugins available for purchase.
Create different account/contacts/opportunity modules for the projects in ModuleBuilder. I strongly advice against this, especially if you use forecasts. There are tweaks, features and functionality that are programmed to only work with the default modules. Those will not work properly with such custom modules. So additional to the effort of creating those modules (and maybe keeping their customizations in sync, if they are supposed to be the same across both projects) you will also have to fix/work-around/code things that work in the default modules but not in the custom ones. If the projects are wildly different and of sufficient size to justify the extra effort, this could be worth it. Otherwise: don't

How to include war in play 2 app?

I have a play 2 Scala application and my customer wants to add a blog solution in a subfolder of this application. I came accross this java blog solution called Apache Roller.
The issue is that I am not able to find it as a jar on maven repo to download it with sbt as we do with other libs because it comes as a war. Is there any way to use a war INSIDE a play 2 app? If yes, where to put it?
I'm on the Apache Roller team and thanks for considering our product. Roller is meant to be a stand-alone web application, just configure your database, drop the WAR into Tomcat and you're set. If desired, Roller offers an LDAP authentication option so users won't need a second set of passwords. [Incidentally, while not yet released, our 5.1-SNAPSHOT is already considerably ahead of our current production 5.0.4 and is expected to be released "soon", so you may wish to consider that option.] Trying to merge WARs will take an exceedingly long time and probably result in a buggy solution, so I would first confirm that your customers will not approve a separate application before trying to integrate blogging software. The Roller User's Mailing List is available if you have any questions.
There is another Java solution, JBake, as it's not a standalone blog server like Roller you may find it more integratable in your web application. (I have not worked with the product so am unsure.) You may end up needing to create the blog entry edit screens, however, prior to feeding the results to JBake.

How to develop against a web-based product with built-in server (not ASP.NET project)?

We have an application at work which is web-based and comes with a bundled web server (Apache tomcat), and is for network monitoring/patch management. It allows for personalisation, all sorts of rules, custom UI design using proprietary components and definition language, and even custom code to fire on events (based on Java).
I am in a team of several developers, each of who will be customising this app to meet various requirements. As it's a server app, not a codebase, what's the best way to setup a dev environment for >1 user?
If there is one single shared VM with this app, I don't know how good source control like TFS would work with this sort of system? I think also, developers working on various parts of the project may even need the same file at the same time (though TFS does do multiple check-outs).
What is the best way to develop against this sort of product? Bare in mind, even with personal VMs and an instance of the app, changes have to be merged to one central instance. Something keeps making me think about how app-virtualisation could help with this?
Thanks
If it is just an instance of Tomcat (even though it was bundled) couldn't you put the whole Tomcat directory and all of its subdirectories under source control? You just need to check in the non-binary parts, so exclude all the .jar, .exe, .tar.gz and .dll files when you check in. That's what I would do, unless I misunderstood your question.
I'm not familiar with the source control software that you mentioned. I have been using SVN (which is free) and TortoiseSVN as a client (also free). Just an option if your software can't support what I've suggested.

What is the most flexible Open Source Content Management System?

Which CMS is the most flexible and/or easily modifiable in the following ways:
Have multiple clients access the CMS with multiple users per client. And each client can control multiple sites.
Control the layout of created pages based on certain criteria. Criteria such as which
section/sub-section the user would like to put the page in. e.g. - if the section for the page chosen is Clothing->Womens->Shorts then only allow certain layouts to be chosen.
It would go something like this:
- The user creates a new page within the CMS
- They choose the section or subsection of the page
- Based on that selection, we control if they are allowed to use the chosen layout/template.
Reason for this is that we want to control the UI of the top level pages (where the user enters the site from). And, have less control on the lower nested pages.
2 very flexible Php based CMS frameworks are Drupal and Joomla. Both are built upon plugin architectures where you can customize you application by downloading, installing and configuring the appropriate plugins for things like blogs, forums, search indexing, RSS, storing & playing video etc...
Drupal refers to their plugins as Modules. There are thousands of modules available (over 700 in the Utilities category alone). Warning - the modules are version dependant and not all modules have been upgraded to run in the current production versions of Drupal so pay attention to the version support.
Joomla refers to their plugins as Extensions. At time of posting, they had over 4500 extensions available. I haven't used Joomla myself so I can't talk to it's quality or ease of use, but it does seem to be another very popular, flexible product.
I just found this post that compares 10 Java based opensource cms products. I don't know if you have a particular technology in mind, but if Java's your thing one of these might help you out.
http://blog.taragana.com/index.php/archive/top-10-java-content-management-software/
Have a look at Jahia (www.jahia.com) - java open source based cms. The features you are describing are indeed typical of "site factories" which is a main business case for that CMS.
read http://www.jahia.com/jahia/webdav/site/jahiacom/shared/products/Jahia%20Sitefactory_WhitePaper.pdf and test yourself the features with the online demo.
I'm using Jahia with Alfresco as document repository using Communitiy release (without Alfresco connector, not too easy but it's possible using REST).
It's really a good solution because with Jahia you could add some Java Spring dynamic modules.
i think Wordpress is one of the best content management system. that provides much better flexibility as compared to other CMS.