← Back to team overview

dhis2-devs team mailing list archive

Re: Using jrebel to stop waiting for redeploying

 

Hi Sapstarshi,

Glad to hear that you solved the problem in few minutes. Thanks for the
tips of hiding jrebel message on facebook. Well, one message a week won't
be a problem, right? Regarding the auto detect of the change on classes
folder when you click Save on our IDE, I am using Eclipse and the
Project/Automatically build works fine. I am suing Netbean for a while but
have to quit it as it is too slow (given that in Eclipse you must disable
all the unnecessary plugins).

Only when you use* mvn jetty:run-war* then you probably have to run mvn
compile (in a separate command line of course) but it takes quite some time
to reload the context because Jrebel reload all the classes (it notices the
changes of all classes).

Thanh

Eclipse screen for auto build:

[image: Inline image 1]



On Tue, Feb 19, 2013 at 11:25 AM, Saptarshi Purkayastha <sunbiz@xxxxxxxxx>wrote:

> Hey Thanh,
>
> Perfect timing since I've been doing the same over the last night...
> trying to run DHIS2 with JRebel and Maven!
>
> There is some problem with spring security and I have to disable the
> jrebel-spring-plugin with -Debel.spring_plugin=false when starting maven.
> There is also the following that I'm stuck at the moment.
>
> Following is an exception that I am getting:
> Unable to load configuration. - package -
> file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123
>  at
> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
> at
> org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:390)
>  at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:436)
> at
> org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:193)
>  at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
> at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>  at
> org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:713)
> at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
>  at
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1282)
> at
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:518)
>  at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:499)
> at
> org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:115)
>  at
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
> at
> org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
>  at
> org.mortbay.jetty.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:156)
> at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>  at
> org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
> at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
>  at
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
> at org.mortbay.jetty.Server.doStart(Server.java:224)
>  at
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
> at
> org.mortbay.jetty.plugin.Jetty6PluginServer.start(Jetty6PluginServer.java:132)
>  at
> org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:454)
> at
> org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:396)
>  at
> org.mortbay.jetty.plugin.AbstractJettyRunMojo.execute(AbstractJettyRunMojo.java:210)
> at org.mortbay.jetty.plugin.Jetty6RunMojo.execute(Jetty6RunMojo.java:184)
>  at
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
>  at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
> at
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
>  at
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
> at
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
>  at
> org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
> at
> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
>  at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
>  at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
> at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
>  at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>  at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  at java.lang.reflect.Method.invoke(Method.java:601)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
>  at
> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
> at
> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
>  at
> org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
> Caused by: The package name 'dhis-web-maintenance-user' at location
> package -
> file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123
> is already been used by another package at location package -
> file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/src/main/resources/struts.xml:9:123
> - package -
> file:/C:/dhis2/dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-user/target/classes/struts.xml:9:123
>  at
> com.opensymphony.xwork2.config.impl.DefaultConfiguration.addPackageConfig(DefaultConfiguration.java:150)
> at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:494)
>  at
> com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:278)
> at
> org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:112)
>  at
> com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:230)
> at
> com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
>  ... 46 more
>
>
> To which pom.xml are you adding the jrebel plugin to the build?
> to dhis-web-portal or dhis-web, so that all projects get the rebel.xml?
>
> PS: You can always hide the posting to your facebook profile when giving
> the application permissions make it to Only me!! :D
>
> ---
> Regards,
> Saptarshi PURKAYASTHA
>
> My Tech Blog:  http://sunnytalkstech.blogspot.com
> You Live by CHOICE, Not by CHANCE
>
>
> On 19 February 2013 04:55, Ngoc Thanh Nguyen <thanh.hispvietnam@xxxxxxxxx>wrote:
>
>> Hi all,
>>
>> One of the most time consuming task when programming with dhis2 is
>> waiting for redeploying. When a small change on java code  must take few
>> minutes for jvm to reload the context, coding becomes very arduous task,
>> especially building portal with a large number of modules.
>>
>> I have tried JRebel and it is a big surprise to me. Going beyond what the
>> company (ZeroTurnaround) advertises, JRebel is really rocks: Java code
>> change effects immediately, so do *.vm, js, css; super easy to getting
>> start (please see my tutorial below); and its completely free if you join
>> their social license, a license that integrates with Facebook so that
>> JRebel can post few message on your behalf claiming how much time you can
>> save using JRebel. Don't worry this posting is so rare, once  a week or
>> month.
>>
>> Steps to start DHIS2 with JRebel.
>>
>> 1. Follow the following tutorial to register the license (it is just a
>> hashed string, you copy and paste into your license activation step)
>> http://zeroturnaround.com/software/jrebel/jrebel-social-tutorial/
>>
>> 2. Now steps to configure JRebel with dhis2. I know most of dhis2
>> developers use Maven instead of IDE to build. Documents on how to run
>> JRebel with Maven is a bit scarce however there is a few. This is a good
>> one.
>> *
>> http://padcom13.blogspot.com/2011/09/using-jrebel-from-pure-maven-in-web.html
>> *
>> *
>> *
>> *Remember:
>> 3. In the pom.xml, you need to set the maven jrebel plugin, i.e.*
>>    <!-- enable generation of jrebel.xml - needed for the agent -->
>>       <plugin>
>>         <groupId>org.zeroturnaround</groupId>
>>         <artifactId>jrebel-maven-plugin</artifactId>
>>         <executions>
>>           <execution>
>>             <id>generate-rebel-xml</id>
>>             <phase>process-resources</phase>
>>             <goals>
>>               <goal>generate</goal>
>>             </goals>
>>           </execution>
>>         </executions>
>>       </plugin>
>>
>> 4. In the environmental variables, set MAVEN_OPTS to have javaagent which
>> points to the folder of jrebel.
>> My MAVEN_OPTS as I extracted jrebel in C:/
>> [image: Inline image 1]
>> 5. Then use mvn jetty:run and enjoy autoredeploy of JRebel. Now all the
>> changes on classes and webapp will be watched and redeployed. Therefore, in
>> your IDE you must set on Build Automatically so that every change on source
>> will be compiled to classes.
>>
>> Note that dont use *maven jetty:**run-war* as Jrebel will watch changes
>> on target/classes and it is not what we want.
>> *
>> *
>> It might require several rounds of configuration until JRebel get run but
>> the result is so rewarded. Let me know if you have any issues.
>>
>> Thanh
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>

PNG image

PNG image


References