Why do you want to invent the wheel twice? How about using
servicemix-scripting endpoints?

Regards
Lars


2009/9/15 Scott Parkerson <[email protected]>:
> (Yeah, I know. I have a lot of questions today.)
>
> While I know that SMX 3 + JBI can be used to create scripting
> endpoints to call out to various languages (JS, Ruby, Groovy), I'm
> missing some essential documentation on how to create a bean in SMX 4
> + OSGi to run a script. In particular, I'm looking for the right bits
> to import + use in my bean to call a Ruby script via JRuby.
>
> Here's my bean code:
>
> public class OutboundSMSRequestHandlerImpl implements 
> OutboundSMSRequestHandler,
>        InitializingBean, DisposableBean
> {
>
>    private static final Logger logger =
>        LoggerFactory.getLogger(OutboundSMSRequestHandlerImpl.class);
>
>    private ScriptEngineManager m_scriptManager = null;
>    private ScriptEngine m_rubyEngine = null;
>    private Invocable m_invocableEngine = null;
>
>   �...@override
>   �...@consume(uri="activemq:queue:outbound_sms_req")
>    public void handle(@Body OutboundSMSRequest outboundSMSRequest)
>    {
>            // do stuff
>
>            FileReader f = new FileReader("thisScript.rb");
>            m_rubyEngine.eval(f);
>
>            Object[] args = {"one", "two"};
>            Object obj =
> m_invocableEngine.invokeFunction("RubyHandleInboundSMSFunc", args);
>            //Object obj =
> m_invocableEngine.invokeFunction("RubyHandleInboundSMSFunc", "junk");
>        }
>        catch (ScriptException se)
>        {
>            /* error */
>            logger.error("ScriptException: " + se.getMessage());
>        }
>        catch (IOException ioe)
>        {
>            /* error */
>            logger.error("IOException: " + ioe.getMessage());
>        }
>        catch (NoSuchMethodException nsme)
>        {
>            /* error */
>            logger.error("NoSuchMethodException: " + nsme.getMessage());
>        }
>        catch (Exception e)
>        {
>            /* error */
>            logger.error("Exception: " + e.getMessage());
>
>            StringWriter sw = new StringWriter();
>            PrintWriter pw = new PrintWriter(sw);
>            e.printStackTrace (pw);
>            logger.error(sw.toString());
>        }
>
>        ...
>    }
>
>   �...@override
>    public void afterPropertiesSet() throws Exception
>    {
>        logger.info("Starting Outbound SMS Request Handler 1");
>
>        m_scriptManager = new ScriptEngineManager();
>
>        List<ScriptEngineFactory> engines =
> m_scriptManager.getEngineFactories();
>        for (ScriptEngineFactory engine : engines) {
>            logger.info("Engine name: " + engine.getEngineName());
>        }
>
>        m_rubyEngine = m_scriptManager.getEngineByName("jruby");
>
>        if (m_rubyEngine == null)
>        {
>            logger.info("there is no jruby engine");
>        }
>        else
>        {
>            m_invocableEngine = (Invocable) m_rubyEngine;
>        }
>    }
>
>   �...@override
>    public void destroy() throws Exception
>    {
>        logger.info("Stopping Outbound SMS Request Handler");
>    }
>
> }
>
> And here's the section of my pom.xml that generates the bundle:
>
>            ...
>           <plugin>
>                <groupId>org.apache.felix</groupId>
>                <artifactId>maven-bundle-plugin</artifactId>
>                <version>1.4.0</version>
>                <extensions>true</extensions>
>                <configuration>
>                    <manifestLocation>META-INF</manifestLocation>
>                    <instructions>
>                        <Export-Package>
>                            com.ateb.dataproc.obc_processor
>                        </Export-Package>
>                        <Private-Package>
>                                com.ateb.dataproc.obc_processor.internal
>                        </Private-Package>
>                        <Import-Package>
>                                org.apache.activemq,
>                                org.apache.camel,
>                                org.apache.camel.component.bean,
>                                org.apache.camel.component.jms,
>                                com.google.code.scriptengines.jruby,
>                            *
>                        </Import-Package>
>                        <Include-Resource>
>                            {maven-resources},
>                            src/main/resources/dataspecs/
>                        </Include-Resource>
>
> <Require-Bundle>com.ateb.dataproc.obc-api,org.apache.camel.camel-jms,org.apache.servicemix.bundles.jruby,scriptengines-jruby</Require-Bundle>
>                    </instructions>
>                </configuration>
>            </plugin>
>            ...
>
> I'm not sure if the problem is:
>
> a) a lack of specified deps, or
> b) creation afterPropertiesSet is too soon (probably not)
>
> Any help on this? BTW, if I'm Doing It Wrong, and this is not the Best
> Practice, let me know, too.
>
> --sgp
>



-- 
http://lhein.blogspot.com

Reply via email to