在eclipse的server视图中适配TongWeb

    经过我一段努力终于将这个关于TongWeb插件搞定,期间也走了一些弯路,现在把大致的过程介绍一下:要想在eclispse的server视图中添加Tongweb选项,千万不能硬来,直接通过修改server视图的源码来达到此目的,这样做很费劲,原因有二:一、你等于把server要实现的功能,自己再重现实现一下,看看它复杂的源码,你会觉得你要干的绝对是一个惊人的工程;二,这样做的话,也不符合插件可重用的特点。刚开始我也是想着改server视图的源码,后来,发现那是一个不可能的事,太难了。实际上,要想在srever视图中添加自己服务的选现,就要搞搞另外一个插件org.eclipse.jst.server.generic.core,有人说可以看看tongcat的server视图的插件,但是tomcat的这个插件做得太完美了,而且tomcat自己定义了自己的一套东西,像Jboss,Websphere,Oracle OC4J Standalone Server等他们公用一套东西。所以选择看看org.eclipse.jst.server.generic.core插件,这样你可以抽取适用于Jboss,Websphere,Oracle OC4J Standalone Server这几类服务的共性东西,

    这项工作大致分一下几步:

    第一步:从plugin.xml文件搞起,在server视图中添加新的Tongweb服务

    <extension
         point="org.eclipse.wst.server.core.runtimeTypes">
      <runtimeType
            class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntime"
            description="description"
            id="org.eclipse.jst.server.kingserver.runtimeType2"
            name="%genericCategory"
            vendor="TongWeb1"
            version="1.0">
           <moduleType types="jst.web" versions="2.2, 2.3, 2.4, 2.5,3.0" />
            <moduleType types="jst.ejb" versions="1.1, 2.0, 2.1, 3.0" />
            <moduleType types="jst.connector" versions="1.0, 1.5" />
            <moduleType types="jst.ear" versions="1.2, 1.3, 1.4, 5.0" />
            <moduleType types="jst.utility" versions="1.0" />
      </runtimeType>
   </extension>

   此扩展点定义了新建Tongweb服务的选择项,其中的moduleType定义了Tongweb支持的几种项目的类型。其中,在GenericServerRuntime中的validate()方法中添加关于启动服务的路径验证。

   <extension
         point="org.eclipse.wst.server.core.serverTypes">
      <serverType
            runtime="true"
            behaviourClass="org.eclipse.jst.server.kingserver.core.TongwebServerBehaviour"
            class="org.eclipse.jst.server.generic.core.internal.GenericServer"
            description="%pluginDescription"
            id="org.eclipse.jst.server.kingserver.tongweb1"
            initialState="stopped"
            launchConfigId="org.eclipse.jst.server.kingserver.core.launchConfigurationType"
            name="%genericCategory"
            startBeforePublish="true" hasConfiguration="false" launchModes="run"
            runtimeTypeId="org.eclipse.jst.server.kingserver.runtimeType2">
      </serverType>
   </extension>

   此扩展点添加Tongweb的一些启动配置选项,launchConfigId="org.eclipse.jst.server.kingserver.core.launchConfigurationType"中指定启动Tongweb的类,TongwebServerBehaviour实际上是关于Tongweb的一些配置描述,主要是添加一些关于获取Tongweb启动参数的方法,


   <extension
         point="org.eclipse.wst.server.ui.wizardFragments">
      <fragment
            class="org.eclipse.jst.server.generic.ui.internal.GenericServerRuntimeWizardFragment"
            id="org.eclipse.jst.server.kingserver.runtime"
            typeIds="org.eclipse.jst.server.kingserver.runtimeType2"/>
      <fragment
            class="org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment"
            id="org.eclipse.jst.server.kingserver.server"
            typeIds="org.eclipse.jst.server.kingserver.tongweb1"/>
   </extension>
   <extension
         point="org.eclipse.wst.server.ui.serverImages">
      <image
            icon="icons/tongweb1.gif"
            id="org.eclipse.jst.server.kingserver.image1"
            typeIds="org.eclipse.jst.server.kingserver.tongweb1">
      </image>
   </extension>

    此扩展点主要是在新建的向导页中加入Tongwen启动的选项,org.eclipse.wst.server.ui.serverImages这个扩展点是添加向导页中所需要的图片

有了以上的这些配置,我们立刻就能在server视图中添加新的Tongweb服务。

    <extension point="org.eclipse.jst.server.generic.core.serverdefinition">
       <serverdefinition id="org.eclipse.jst.server.kingserver.runtimeType2" definitionfile="/serverdef/tongweb.serverdef">
        </serverdefinition>
   </extension>
    此扩展点主要是通过加载tongweb.serverdef文件,gerneric server插件会专门去解析这个tongweb.serverdef文件,所以,要想tongweb的配置正确,多多阅读serverdef的定义标准,很关键。这里面有关于serverdef文件的解释

http://www.eclipse.org/webtools/jst/components/server/tutorials/genericServers/ServerDefinitionExplained.html 反正我看了好几遍。

    <property id="wasAdminID" label="%wasAdminID"
        type="string" context="server" default="admin" />

     在新建服务向导中添加关于启动Tongweb服务的配置属性,包括指定Tongweb的目录,启动的端口等

     <module>
        <type>jst.web</type>
        <publishDir>${wasHome}/autodeploy</publishDir>
        <publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
    </module>

     配置Tongweb服务的应用部署的方式,

    
<start>
        <mainClass>com.tongweb.server.PELaunch</mainClass>
        <programArguments>start</programArguments>
        <workingDirectory>${wasHome}</workingDirectory>
       <vmParameters>-Xms800m -Xmx800m -Xmn400m -XX:+UnlockDiagnosticVMOptions -XX:PermSize=128m -XX:MaxPermSize=128m -XX:NewRatio=2 -XX:+LogVMOutput -XX:LogFile=${wasHome}/bin/../logs/jvm.log -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.util.logging.manager=com.tongweb.server.logging.ServerLogManager -Djava.library.path=${wasHome}/bin/../lib:${JAVA_HOME}/bin:${wasHome}/bin/../bin -Djava.endorsed.dirs=${wasHome}/bin/../lib/endorsed -Djavax.management.builder.initial=com.tongweb.advance.admin.AppServerMBeanServerBuilder -Djava.security.auth.login.config=${wasHome}/bin/../config/login.conf -Djmx.invoke.getters=true -Djava.ext.dirs=${JAVA_HOME}/lib/ext:${JAVA_HOME}/jre/lib/ext:${wasHome}/bin/../lib/ext:${wasHome}/bin/../javadb/lib -Dtongweb.root=${wasHome}/bin/.. -Djava.awt.headless=true -Dtongweb.serverName=server -Dtongweb.verbose=true -Djava.rmi.server.RMIClassLoaderSpi=com.tongweb.server.TongWebRMIClassLoader -Djavax.net.ssl.keyStore=${wasHome}/bin/../config/server.keystore -Djavax.net.ssl.trustStore=${wasHome}/bin/../config/cacerts -Djava.security.policy=${wasHome}/bin/../config/server.policy -Dtongweb.environmentFactory=com.tongweb.config.serverbeans.AppserverConfigEnvironmentFactory -Dtongweb.pluggable.repository=com.tongweb.advance.server.pluggable.EEPluggableFeatureImpl -Dtongweb.logFile=${wasHome}/bin/../logs/server.log -Dtongweb.configFile=${wasHome}/bin/../config -Dtongweb.identity=false -Dtongweb.taglibs=twns-jstl.jar,jsf-impl.jar -Dtongweb.taglisteners=jsf-impl.jar -Dtongweb.classloader.sharedChainJars=${wasHome}/bin/../lib/ant/lib/ant.jar -Dtongweb.classloader.optionalOverrideableChain=webservices-rt.jar,webservices-tools.jar -Dtongweb.classloader.excludesList=admin-cli.jar,twns-anttask.jar,twns-el.jar -Dtongweb.classloader.appserverChainJars=admin-cli.jar,j2ee-svc.jar</vmParameters>
        <classpathReference>tongweb.launch</classpathReference>
    </start>
    <stop>
        <mainClass>com.tongweb.server.PELaunch</mainClass>
        <programArguments>stop</programArguments>
        <vmParameters>-Xmx512m -XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=192m -XX:NewRatio=2 -XX:+LogVMOutput -XX:LogFile=${wasHome}/bin/../logs/jvm.log -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.util.logging.manager=com.tongweb.server.logging.ServerLogManager -Djava.library.path=${wasHome}/bin/../lib:../j2sdk-image-product/bin:${wasHome}/bin/../bin -Djava.endorsed.dirs=${wasHome}/bin/../lib/endorsed -Djavax.management.builder.initial=com.tongweb.advance.admin.AppServerMBeanServerBuilder -Djava.security.auth.login.config=${wasHome}/bin/../config/login.conf -Djmx.invoke.getters=true -Djava.ext.dirs=../j2sdk-image-product/lib/ext:../j2sdk-image-product/jre/lib/ext:${wasHome}/bin/../lib/ext:${wasHome}/bin/../javadb/lib -Dtongweb.root=${wasHome}/bin/.. -Dtongweb.serverName=server -Dtongweb.verbose=true -Djava.rmi.server.RMIClassLoaderSpi=com.tongweb.server.TongWebRMIClassLoader -Djavax.net.ssl.keyStore=${wasHome}/bin/../config/server.keystore -Djavax.net.ssl.trustStore=${wasHome}/bin/../config/cacerts -Djava.security.policy=${wasHome}/bin/../config/server.policy -Dtongweb.environmentFactory=com.tongweb.config.serverbeans.AppserverConfigEnvironmentFactory -Dtongweb.pluggable.repository=com.tongweb.advance.server.pluggable.EEPluggableFeatureImpl -Dtongweb.logFile=${wasHome}/bin/../logs/server.log -Dtongweb.configFile=${wasHome}/bin/../config -Dtongweb.identity=false -Dtongweb.taglibs=twns-jstl.jar,jsf-impl.jar -Dtongweb.taglisteners=jsf-impl.jar -Dtongweb.classloader.sharedChainJars=${wasHome}/bin/../lib/ant/lib/ant.jar -Dtongweb.classloader.optionalOverrideableChain=webservices-rt.jar,webservices-tools.jar -Dtongweb.classloader.excludesList=admin-cli.jar,twns-anttask.jar -Dtongweb.classloader.appserverChainJars=admin-cli.jar,j2ee-svc.jar</vmParameters>    
        <workingDirectory>${wasHome}</workingDirectory>
        <classpathReference>tongweb.launch</classpathReference>
    </stop>

      指定Tongweb启动和停止的详细配置参数,

   第二步:在server视图中启动新建的Tongweb服务

generic server适配了很多的服务,但是,还没有适配Tongweb,所以他的启动的类需要我们自己来写,Tongweb要想启动,需要配置:工作目录workingDirectory、VM参数、Tongweb启动类、依赖的jar包。这个类需要继承AbstractJavaLaunchConfigurationDelegate类就可以,然后将参数一个一个的加入进来。这个需要慢慢来写,下面是Tongweb在终端启动的命令:

    java -classpath /opt/public/jdk1.6.0_18/lib/tools.jar:/usr/TongWeb5.0/bin/../lib/launch.jar:/usr/TongWeb5.0/bin/../lib/license.jar -Xms800m -Xmx800m -Xmn400m -XX:+UnlockDiagnosticVMOptions -XX:PermSize=128m -XX:MaxPermSize=128m -XX:NewRatio=2 -XX:+LogVMOutput -XX:LogFile=/usr/TongWeb5.0/bin/../logs/jvm.log -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=360000 -Djava.util.logging.manager=com.tongweb.server.logging.ServerLogManager -Djava.library.path=/usr/TongWeb5.0/bin/../lib:/opt/public/jdk1.6.0_18/bin:/usr/TongWeb5.0/bin/../bin -Djava.endorsed.dirs=/usr/TongWeb5.0/bin/../lib/endorsed -Djavax.management.builder.initial=com.tongweb.advance.admin.AppServerMBeanServerBuilder -Djava.security.auth.login.config=/usr/TongWeb5.0/bin/../config/login.conf -Djmx.invoke.getters=true -Djava.ext.dirs=/opt/public/jdk1.6.0_18/lib/ext:/opt/public/jdk1.6.0_18/jre/lib/ext:/usr/TongWeb5.0/bin/../lib/ext:/usr/TongWeb5.0/bin/../javadb/lib -Dtongweb.root=/usr/TongWeb5.0/bin/.. -Djava.awt.headless=true -Dtongweb.serverName=server -Dtongweb.verbose=true -Djava.rmi.server.RMIClassLoaderSpi=com.tongweb.server.TongWebRMIClassLoader -Djavax.net.ssl.keyStore=/usr/TongWeb5.0/bin/../config/server.keystore -Djavax.net.ssl.trustStore=/usr/TongWeb5.0/bin/../config/cacerts -Djava.security.policy=/usr/TongWeb5.0/bin/../config/server.policy -Dtongweb.environmentFactory=com.tongweb.config.serverbeans.AppserverConfigEnvironmentFactory -Dtongweb.pluggable.repository=com.tongweb.advance.server.pluggable.EEPluggableFeatureImpl -Dtongweb.logFile=/usr/TongWeb5.0/bin/../logs/server.log -Dtongweb.configFile=/usr/TongWeb5.0/bin/../config -Dtongweb.identity=false -Dtongweb.taglibs=twns-jstl.jar,jsf-impl.jar -Dtongweb.taglisteners=jsf-impl.jar -Dtongweb.classloader.sharedChainJars=/usr/TongWeb5.0/bin/../lib/ant/lib/ant.jar -Dtongweb.classloader.optionalOverrideableChain=webservices-rt.jar,webservices-tools.jar -Dtongweb.classloader.excludesList=admin-cli.jar,twns-anttask.jar,twns-el.jar -Dtongweb.classloader.appserverChainJars=admin-cli.jar,j2ee-svc.jar com.tongweb.server.PELaunch start

    其中/opt/public/jdk1.6.0_18/为JDK的路径,/usr/TongWeb5.0/为Tongweb文件路径,有了这个关键参数,启动Tongweb就没什么问题了。

    第三步:将应用在Tongweb中部署

    虽然,Tongweb能够启动,但是应用去还没有办法部署进来,怎么部署这个应用呢?

    首先,需要明白Tongweb的两种部署方式:通过Tongweb的游览器控制台部署和直接将应用的war包放到Tongweb的autodeploy目录下面进行部署,毫无疑问通过server视图中的Tongweb部署应用要采用第二中方式。

    这里将应用.war包拷贝到autodeploy目录下面主要采用ant方式,

    <extension
         point="org.eclipse.jst.server.kingserver.genericpublisher">
      <genericpublisher
                  class="org.eclipse.jst.server.kingserver.core.AntPublisher"
              id="org.eclipse.jst.server.generic.antpublisher">
      </genericpublisher>
   </extension>

   通过此扩展点来获取指定Ant的build方式,org.eclipse.jst.server.kingserver.core.AntPublisher为build类,org.eclipse.jst.server.kingserver.genericpublisher扩展点是我们自己定义的,类似于generic server插件的自定义的org.eclipse.jst.server.generic.core。genericpublisher扩展点,有了这些部署应用应该能轻松搞定!

   




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值