correct yes for all intents and purposes struts-osgi-plugin *is* a functional struts plugin
in order to interface to maven (plexus framework) we'll need to 1) port these attributes to \META-INF\maven\plugin.xml <constant name="struts.objectFactory" value="osgi" /> <constant name="struts.objectFactory.delegate" value="struts" /> <constant name="struts.freemarker.manager.classname" value="org.apache.struts2.osgi.BundleFreemarkerManager" /><!-- TBD: which FreemarkerManager to use with Maven 3.x --> <constant name="struts.staticContentLoader" value="org.apache.struts2.osgi.loaders.StaticContentBundleResourceLoader" /><!-- TBD: which StaticContentBundleResourceLoader to use with Maven 3.x --> <constant name="struts.convention.action.includeJars" value="jar:file:.*?/bundles/.*?\.jar(!/)?" /> 2) convert Struts methods for org.apache.struts2.osgi.OsgiUtil.java translateBundleURLToJarURLand or org.apache.struts2.osgi.interceptor.OsgiInterceptor intercept method to goal annotation which will extends AbstractMojo@goal buildStruts2OSGIMojo extends org.apache.maven.plugin.AbstractMojo(execute method) 3)populate \META-INF\maven\plugin.xml so..in order to participate in maven lifecycle ... a)defaultGoal will be 'build' b)default binding will bind to 'package' phase community..what are we missing ? Martin ______________________________________________ ...place long-winded disclaimer here... > Date: Wed, 9 Jan 2013 09:37:02 +0200 > From: christina.kasko...@eurodyn.com > To: mgai...@hotmail.com > CC: user@struts.apache.org; us...@maven.apache.org > Subject: Re: Using Struts2 OSGi plugin with GlassFish > > Hi Martin. > > In struts2-osgi-plugin.jar there is no .\META-INF\maven\plugin.xml file. > I assume you mean the .\struts-plugin.xml file? Also if I understand > correctly there is no existing implementation of the PackageProvider > which can work with GlassFish, I will just have to implement my own, is > that right? > > > On 08/01/2013 21:30, Martin Gainty wrote: > > The beauty of implementing a maven-plugin is that all attributes of > > the plugin are configurable > > > > open struts2-osgi-plugin.jar > > > > edit > > .\META-INF\maven\plugin.xml > > > > look for > > <bean name="osgi" > > type="com.opensymphony.xwork2.config.PackageProvider" > > class="org.apache.struts2.osgi.OsgiConfigurationProvider" /> > > > > as long as your com.opensymphony.xwork2.config.PackageProvider (felix > > provider) implements interfaces > > com.opensymphony.xwork2.config.PackageProvider > > org.osgi.framework.BundleListener > > > > then substitute in the felix PackageProvider to class attribute at > > > > <bean name="osgi" > > type="com.opensymphony.xwork2.config.PackageProvider" > > class="org.apache.struts2.osgi.OsgiConfigurationProvider" /> > > > > > > save .\META-INF\maven\plugin.xml > > / > > close > > / > > rejar > > / > > place struts2-osgi-plugin.jar back into lib folder (after saving > > original as struts2-osgi-plugin.jar.original) > > > > if you do not redirect the PackageProvider this Struts-osgi-Listener > > will be called as seen here from Provider code > > > > org.apache.struts2.osgi.OsgiConfigurationProvider > > > > public class OsgiConfigurationProvider implements PackageProvider, > > BundleListener { > > private static final Logger LOG = > > LoggerFactory.getLogger(OsgiConfigurationProvider.class); > > > > private Configuration configuration; > > private ObjectFactory objectFactory; > > > > private OsgiHost osgiHost; > > private BundleContext bundleContext; > > private BundleAccessor bundleAccessor; > > private boolean bundlesChanged = false; > > private ServletContext servletContext; > > > > public void init(Configuration configuration) throws > > ConfigurationException { > > osgiHost = (OsgiHost) > > servletContext.getAttribute(StrutsOsgiListener.OSGI_HOST); > > bundleContext = osgiHost.getBundleContext(); > > bundleAccessor.setBundleContext(bundleContext); > > bundleAccessor.setOsgiHost(osgiHost); > > this.configuration = configuration; > > > > //this class loader interface can be used by other plugins to > > lookup resources > > //from the bundles. A temporary class loader interface is set > > during other configuration > > //loading as well > > servletContext.setAttribute(ClassLoaderInterface.CLASS_LOADER_INTERFACE, > > new BundleClassLoaderInterface()); > > } > > > > where servletContext Listener is set to > > org.apache.struts2.osgi.StrutsOsgiListener > > > > public class StrutsOsgiListener implements ServletContextListener { > > public static final String OSGI_HOST = "__struts_osgi_host"; > > private FelixOsgiHost osgiHost; > > public void contextInitialized(ServletContextEvent sce) { > > ServletContext servletContext = sce.getServletContext(); > > osgiHost = new FelixOsgiHost(); > > servletContext.setAttribute(OSGI_HOST, osgiHost); > > try { > > osgiHost.init(servletContext); > > } catch (Exception e) { > > throw new StrutsException("Apache Felix failed to start", e); > > } > > } > > > > org.apache.struts2.osgi.FelixOsgiHost init will be called > > > > public void init(ServletContext servletContext) { > > this.servletContext = servletContext; > > startFelix(); > > } > > > > protected void startFelix() { > > //load properties from felix embedded file > > Properties configProps = getProperties("default.properties"); > > // Copy framework properties from the system properties. > > Main.copySystemProperties(configProps); > > replaceSystemPackages(configProps); > > //struts, xwork and felix exported packages > > Properties strutsConfigProps = > > getProperties("struts-osgi.properties"); > > addExportedPackages(strutsConfigProps, configProps); > > //find bundles and adde em to autostart property > > addAutoStartBundles(configProps); > > // Bundle cache > > String storageDir = System.getProperty("java.io.tmpdir") + > > ".felix-cache"; > > configProps.setProperty(Constants.FRAMEWORK_STORAGE, storageDir); > > if (LOG.isDebugEnabled()) > > LOG.debug("Storing bundles at [#0]", storageDir); > > String cleanBundleCache = > > getServletContextParam("struts.osgi.clearBundleCache", "true"); > > if ("true".equalsIgnoreCase(cleanBundleCache)) { > > if (LOG.isDebugEnabled()) > > LOG.debug("Clearing bundle cache"); > > configProps.put(FelixConstants.FRAMEWORK_STORAGE_CLEAN, > > FelixConstants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT); > > } > > //other properties > > configProps.put(FelixConstants.SERVICE_URLHANDLERS_PROP, "false"); > > configProps.put(FelixConstants.LOG_LEVEL_PROP, > > getServletContextParam("struts.osgi.logLevel", "1")); > > configProps.put(FelixConstants.BUNDLE_CLASSPATH, "."); > > configProps.put(FelixConstants.FRAMEWORK_BEGINNING_STARTLEVEL, > > getServletContextParam("struts.osgi.runLevel", "3")); > > try { > > List<BundleActivator> list = new ArrayList<BundleActivator>(); > > list.add(new AutoActivator(configProps)); > > configProps.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list); > > felix = new Felix(configProps); > > felix.start(); > > if (LOG.isTraceEnabled()) > > LOG.trace("Apache Felix is running"); > > } > > catch (Exception ex) { > > throw new ConfigurationException("Couldn't start Apache > > Felix", ex); > > } > > > > http://blogs.atlassian.com/2007/07/osgi_plugin_for_struts_2_lesso/ > > > > Martin > > ______________________________________________ > > Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité > > > > Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene > > Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede > > unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. > > Diese Nachricht dient lediglich dem Austausch von Informationen und > > entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten > > Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den > > Inhalt uebernehmen. > > > > Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le > > destinataire prévu, nous te demandons avec bonté que pour satisfaire > > informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie > > de ceci est interdite. Ce message sert à l'information seulement et n'aura > > pas n'importe quel effet légalement obligatoire. Étant donné que les email > > peuvent facilement être sujets à la manipulation, nous ne pouvons accepter > > aucune responsabilité pour le contenu fourni. > > > > > > > > > Date: Tue, 8 Jan 2013 12:04:32 +0200 > > > From: christina.kasko...@eurodyn.com > > > To: user@struts.apache.org > > > Subject: Using Struts2 OSGi plugin with GlassFish > > > > > > Hello. > > > > > > I am trying to use the Struts2 OSGi plugin and have tried creating a > > web > > > application containing the struts2-osgi-demo-bundle. All goes well when > > > deploying the application on Tomcat, however when I try deploying on > > > GlassFish (which has Felix included) I get a number of errors which I > > > understand are due to the fact that the plugin starts a new Felix > > > instance while another one is already running on GlassFish and that > > > certain Felix classes are present more than one times in the classpath > > > (one from the Felix jars included in the application as dependencies of > > > the plugin and one from the felix.jar already included in GlassFish). > > > More details on the actual errors are available in this stackoverflow > > > post - > > > > > http://stackoverflow.com/questions/14200300/using-struts2-osgi-plugin-with-glassfish. > > > > > > My question is: is there any specific configuration I should make in > > > order to use the OSGi plugin in GlassFish (or any other container > > > including Felix for that matter)? > > > > > > Thank you, > > > Christina > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > > > For additional commands, e-mail: user-h...@struts.apache.org > > > >