经过我一段努力终于将这个关于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服务
description="description"
id="org.eclipse.jst.server.kingserver.runtimeType2"
name="%genericCategory"
vendor="TongWeb1"
version="1.0">
此扩展点定义了新建Tongweb服务的选择项,其中的moduleType定义了Tongweb支持的几种项目的类型。其中,在GenericServerRuntime中的validate()方法中添加关于启动服务的路径验证。
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">
此扩展点添加Tongweb的一些启动配置选项,launchCOnfigId="org.eclipse.jst.server.kingserver.core.launchConfigurationType"中指定启动Tongweb的类,TongwebServerBehaviour实际上是关于Tongweb的一些配置描述,主要是添加一些关于获取Tongweb启动参数的方法,
id="org.eclipse.jst.server.kingserver.runtime"
typeIds="org.eclipse.jst.server.kingserver.runtimeType2"/>
id="org.eclipse.jst.server.kingserver.server"
typeIds="org.eclipse.jst.server.kingserver.tongweb1"/>
id="org.eclipse.jst.server.kingserver.image1"
typeIds="org.eclipse.jst.server.kingserver.tongweb1">
此扩展点主要是在新建的向导页中加入Tongwen启动的选项,org.eclipse.wst.server.ui.serverImages这个扩展点是添加向导页中所需要的图片
有了以上的这些配置,我们立刻就能在server视图中添加新的Tongweb服务。
此扩展点主要是通过加载tongweb.serverdef文件,gerneric server插件会专门去解析这个tongweb.serverdef文件,所以,要想tongweb的配置正确,多多阅读serverdef的定义标准,很关键。这里面有关于serverdef文件的解释
http://www.eclipse.org/webtools/jst/components/server/tutorials/genericServers/ServerDefinitionExplained.html 反正我看了好几遍。
在新建服务向导中添加关于启动Tongweb服务的配置属性,包括指定Tongweb的目录,启动的端口等
配置Tongweb服务的应用部署的方式,
指定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方式,
id="org.eclipse.jst.server.generic.antpublisher">
通过此扩展点来获取指定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扩展点,有了这些部署应用应该能轻松搞定!