﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-hengheng123456789-随笔分类-JAVA-Server</title><link>http://www.blogjava.net/hengheng123456789/category/17308.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Aug 2007 10:54:42 GMT</lastBuildDate><pubDate>Wed, 08 Aug 2007 10:54:42 GMT</pubDate><ttl>60</ttl><item><title>以Apache为基础的SVN服务器</title><link>http://www.blogjava.net/hengheng123456789/archive/2007/05/24/119769.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Thu, 24 May 2007 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/archive/2007/05/24/119769.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/119769.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/archive/2007/05/24/119769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/119769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/119769.html</trackback:ping><description><![CDATA[（引自：<a href="http://www.subversion.org.cn/tsvndoc/tsvn-serversetup.html#tsvn-serversetup-mod_authz_svn">http://www.subversion.org.cn/tsvndoc/tsvn-serversetup.html#tsvn-serversetup-mod_authz_svn</a>）<br><br>&nbsp;&nbsp;&nbsp;本人最近由于工作需要研究了一些SVN的配置工作，原来都是用CVS的所以还是需要学习一些的。<br><br>&nbsp;&nbsp;&nbsp;为了使用TortoiseSVN（或任何其他Subversion客户端），你需要放置你的版本库，你可以将版本库存于本地并使用<span class=emphasis><em>file://</em></span>协议访问，也可以放置于服务器，使用<span class=emphasis><em>http://</em></span>或<span class=emphasis><em>svn://</em></span>访问，这两种服务器协议也可以被加密，使用<span class=emphasis><em>https://</em></span>或<span class=emphasis><em>svn+ssh://</em></span>。<br><br>1、安装Apache<br>&nbsp;&nbsp;&nbsp;可以安装到Windows2000、WinXP+SP1还是Windows2003中。<br>&nbsp;&nbsp;&nbsp;a、从Apache网站<a href="http://httpd.apache.org/download.cgi" target=_top><em class=citetitle>http://httpd.apache.org/download.cgi</em></a>下载Apache，最好是高于2.0.54版，但不要下载最新的如2.2.XX和2.1.XX的。<br>&nbsp;&nbsp;&nbsp;我下载的是&nbsp;&nbsp;apache_2.0.59-win32-x86-no_ssl.msi。<br>&nbsp;&nbsp;&nbsp;b、一旦你有了Apache2安装程序，你可以双击它，然后它会指导你的安装过程，请确认你输入的server的URL正确（如果你的服务器没有dns名称，请直接输入IP地址）。建<span style="FONT-SIZE: 12pt">议安</span>装Apache<span style="FONT-SIZE: 12pt"><code class=literal>为所有用户，在80端口，作为一个服务</code>。注意</span>：如果你已经有了IIS或其他监听80段口的程序，安装会失败，如果发生这种情况，直接到程序的安装目录<code class=filename>\Apache Group\Apache2\conf</code>，打开<code class=filename>httpd.conf</code>。编辑文件的<code class=literal>Listen 80</code>为其他可用的端口，例如<code class=literal>Listen 81</code>，然后重新启动－这样就不会那个问题了。<br>&nbsp;&nbsp;&nbsp;c、现在可以测试Apache服务器了，将浏览器指向<code class=systemitem><a href="http://localhost（或ip+端口号）/">http://localhost（或ip+端口号）/</a></code>－将会看到一个预先配置的网站。<br>2、安装Subversion<br>&nbsp;&nbsp;&nbsp;a、从<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91" target=_top><em class=citetitle>http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91</em></a>下载最新版本的Subversion（我下载的是svn-1.4.3-setup.exe，与apache_2.0.59-win32-x86-no_ssl.msi是珠联璧合！）。<br>&nbsp;&nbsp;&nbsp;b、运行Subversion安装程序，并根据指导安装，如果Subversion认识到你安装了Apache，你就几乎完成了工作。<br>3、配置<br>&nbsp;&nbsp;&nbsp;现在你已经设置了Apache和Subversion，但是Apache不知道如何处理Subversion客户端，例如TortoiseSVN。为了让Apache知道哪个目录是用来作为Subversion版本库，你需要使用编辑器（例如记事本）编辑Apache的配置文件（通常是<code class=filename>c:\program files\apache group\apache2\conf\httpd.conf</code>）：<br>&nbsp;&nbsp;&nbsp;a、建立版本库<br>&nbsp;&nbsp;&nbsp;在DOS下输入以下命令（注意：先建立 D:\SVN 目录）：<br>svnadmin create D:\SVN\repository<br>&nbsp;&nbsp;&nbsp;于是建立了名为repository的版本库，<span style="COLOR: red">D:\SVN</span> 目录为以后增加其他所有版本库的父路径。<br><br>&nbsp;&nbsp;&nbsp;b、在配置文件最后添加如下几行：<br>
<pre class=screen>&lt;Location <span style="COLOR: #00ff00">/svn</span>&gt;
DAV svn
SVNListParentPath on
SVNParentPath <span style="COLOR: red">D:\SVN</span>
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
&lt;/Location&gt;</pre>
<pre class=screen>&nbsp;&nbsp;&nbsp;这个配置告诉Apache你的所有的Subversion版本库在物理上位于<code class=filename>D:\SVN</code>，版本库对外的URL是：<code class=systemitem> http://<font color=#002c99>localhost（或ip+端口号）</font>/svn/ </code>，访问需要文件<code class=filename>passwd</code>中的用户/密码限制。</pre>
<pre class=screen>&nbsp;&nbsp;&nbsp;如果你希望所有人可以读你的版本库，但是只有特定用户可以写，你可以修改下面几行</pre>
<pre class=screen>Require valid-user</pre>
<pre class=screen>&nbsp;&nbsp;&nbsp;为：</pre>
<pre class=screen>
<pre class=screen>&lt;LimitExcept GET PROPFIND OPTIONS REPORT&gt;
Require valid-user
&lt;/LimitExcept&gt;
</pre>
</pre>
<pre class=screen>&nbsp;&nbsp;&nbsp;c、为了创建<code class=filename>passwd</code>文件，再次打开命令行提示符（DOS），来到apache2目录（通常是<code class=filename>c:\program files\apache group\apache2</code>）通过输入下面的命令创建文件</pre>
<pre class=screen>bin\htpasswd -c passwd <span style="COLOR: #ff00ff">&lt;username&gt;<br></span>
</pre>
<p>&nbsp;&nbsp;&nbsp;其中<span style="COLOR: #ff00ff">&lt;username&gt;</span>为你要创建的用户名称。<br>&nbsp;&nbsp;&nbsp;如果想继续添加用户则输入如下命令：<br><br>bin\htpasswd passwd &lt;username&gt;<br><br>&nbsp;&nbsp;&nbsp;d、再次重启Apache服务。<br><br>&nbsp;&nbsp;&nbsp;e、将浏览器指向<code class=systemitem><a href="http://myserver/svn/MyNewRepository">http://localhost（或ip+端口号）<font color=#000000>/</font>/svn/<font color=#000000>repository</font></a></code>（<code class=filename>repository</code>是你此前创建的版本库名），如果一切正常，你会被提示输入用户名和密码，然后你会看到版本库的内容。<br><br>&nbsp;&nbsp;&nbsp;f、如果不能访问，可能是防火墙或杀毒软件把80端口屏蔽了，更改<font face="Courier New">httpd.conf中的端口号即可，或设置防火墙。</font><br><br>QA:<br>安装Apache 2.0.x 版本常见错误错误：</p>
<p>Syntax error on line 198 of C:/Program Files/Apache Group/Apache2/conf/httpd.conf:<br>ServerAdmin takes one argument, The email address of the server administrator<br>Note the errors or messages above, and press the &lt;ESC&gt; key to exit. 24...</p>
<p>更改配置文件第198行为</p>
<p>#ServerAdmin</p>
<p>然后把apache装成WINDOWS的服务，方法是这样的。进入到C:/Program Files/Apache Group/Apache2/bin/目录下，执行下面的命令：apache -k install，这样apache就做为windows的一项服务了，再启动apache就不出现上面的错误提示了。<br>最后终于把Apache给启动起来了。<br><br></p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/119769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2007-05-24 17:05 <a href="http://www.blogjava.net/hengheng123456789/archive/2007/05/24/119769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jboss之JMX实例：上传文件到Jboss目录中</title><link>http://www.blogjava.net/hengheng123456789/archive/2007/01/27/96275.html</link><dc:creator>哼哼</dc:creator><author>哼哼</author><pubDate>Sat, 27 Jan 2007 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/hengheng123456789/archive/2007/01/27/96275.html</guid><wfw:comment>http://www.blogjava.net/hengheng123456789/comments/96275.html</wfw:comment><comments>http://www.blogjava.net/hengheng123456789/archive/2007/01/27/96275.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hengheng123456789/comments/commentRss/96275.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hengheng123456789/services/trackbacks/96275.html</trackback:ping><description><![CDATA[
		<p>   这几天实现了一个向远程Jboss服务器中部署文件的程序，是采用Jboss 的 JMX 远程调用方法来实现的，方法比较简单，略微修改就可以把文件传送到远程启动了Jboss服务器的机器上，希望与大家分享，此处贴上了全部实例代码，配置好后即可运行。<br /><br />   实现步骤如下：<br /><br />1、下载安装Jboss服务器<br /><br />2、新建立java项目，引入jboss安装目录 server\default\lib 中的 jboss.jar 和 jmx-adaptor-plugin.jar 包到classpath中<br /><br />3、建立 RMIAdaptorHelper.java 类，用于处理远程调用，代码如下：<br /><br />package com.sample.jmxagent.jboss;</p>
		<p>import java.io.Serializable;<br />import java.util.Properties;</p>
		<p>import javax.management.ObjectName;<br />import javax.naming.CommunicationException;<br />import javax.naming.Context;<br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;</p>
		<p>import org.jboss.jmx.adaptor.rmi.RMIAdaptor;</p>
		<p>public class RMIAdaptorHelper<br />{<br /> private String  _rmiHost = "127.0.0.1";<br /> private int   _rmiPort = 1099;<br /> private int   _timeout = 2000;  // ms<br /> private RMIAdaptor _server;</p>
		<p> public RMIAdaptorHelper(String rmiHost, int rmiPort, int timeout)<br />   throws CommunicationException, NamingException<br /> {<br />  this._rmiHost = rmiHost;<br />  this._rmiPort = rmiPort;<br />  this._timeout = timeout;<br /> }</p>
		<p> /**<br />  * 远程调用 MBEAN<br />  */<br /> public Object invoke(RmiInvokeObject rmido) throws Exception<br /> {<br />  ObjectName name = new ObjectName(rmido.getJndiname());<br />  return _server.invoke(name, rmido.getMethodname(), rmido<br />    .getMethodArgs(), rmido.getMethodArgsType());<br /> }</p>
		<p> /**<br />  * 连接 Jboss rmi 服务器<br />  */<br /> public void connect() throws NamingException, CommunicationException<br /> {<br />  Properties prop = System.getProperties();<br />  prop.put(Context.INITIAL_CONTEXT_FACTORY,<br />    "org.jnp.interfaces.NamingContextFactory");<br />  prop.put(Context.URL_PKG_PREFIXES,<br />    "org.jboss.naming:org.jnp.interfaces");<br />  prop.put(Context.PROVIDER_URL, "jnp://" + _rmiHost + ":" + _rmiPort);</p>
		<p>  prop.put("jnp.discoveryTimeout", String.valueOf(_timeout));</p>
		<p>  InitialContext ic = new InitialContext(prop);<br />  if (_server != null)<br />  {<br />   System.out.println("RMIAdaptorHelper not null");<br />   _server = null;<br />  }<br />  Object o = ic.lookup("jmx/rmi/RMIAdaptor");<br />  _server = (RMIAdaptor) o;</p>
		<p> }</p>
		<p> /**<br />  * 远程调用的对象类<br />  */<br /> public class RmiInvokeObject implements Serializable<br /> {<br />  private String  jndiname;<br />  private String  methodname;<br />  private Object[] methodArgs;<br />  private String[] methodArgsType;</p>
		<p>  public String getJndiname()<br />  {<br />   return jndiname;<br />  }</p>
		<p>  public void setJndiname(String mbeanName)<br />  {<br />   this.jndiname = mbeanName;<br />  }</p>
		<p>  public Object[] getMethodArgs()<br />  {<br />   return methodArgs;<br />  }</p>
		<p>  public void setMethodArgs(Object[] methodArgs)<br />  {<br />   this.methodArgs = methodArgs;<br />  }</p>
		<p>  public String[] getMethodArgsType()<br />  {<br />   return methodArgsType;<br />  }</p>
		<p>  public void setMethodArgsType(String[] methodArgsType)<br />  {<br />   this.methodArgsType = methodArgsType;<br />  }</p>
		<p>  public String getMethodname()<br />  {<br />   return methodname;<br />  }</p>
		<p>  public void setMethodname(String methodname)<br />  {<br />   this.methodname = methodname;<br />  }<br /> }<br />}<br /><br />4、建立 FileObject.java 类，用于存储所要传输的文件内容，代码如下：<br /><br />package com.sample.upload.mbean;</p>
		<p>import java.io.Serializable;</p>
		<p>public class FileObject implements Serializable<br />{<br /> public byte[] fileContent;<br />}<br /><br />5、建立 FileUploadMBean.java 接口，用于 Jboss 调用，代码如下：<br />package com.sample.upload.mbean;</p>
		<p>public interface FileUploadMBean<br />{<br /> public boolean uploadFile(String fileName, FileObject fo) throws Exception;<br />}<br /><br /><br />6、建立 FileUpload.java 类，用于实现FileUploadMBean 接口，代码如下：<br /><br />package com.sample.upload.mbean;</p>
		<p>import java.io.File;<br />import java.io.FileOutputStream;<br />import java.net.URI;</p>
		<p>public class FileUpload implements FileUploadMBean<br />{<br />    public static final String JBOSS_SERVER_BASE_URL = "jboss.server.base.url";<br />    public static final String JBOSS_SERVER_NAME = "jboss.server.name";<br />    public static final String JBOSS_SERVER_PATH = System.getProperty(JBOSS_SERVER_BASE_URL)+ System.getProperty(JBOSS_SERVER_NAME);<br />    public static final String NODE_ADAPTOR_PATH = JBOSS_SERVER_PATH + "/";<br />    <br /> private FileOutputStream fos = null;<br /> private File    f = null;</p>
		<p> public boolean uploadFile(String fileName, FileObject fo) throws Exception<br /> {<br />  boolean returnValue = false;<br />  try<br />  {<br />   // 在 Jboss 的 server\default 目录下新建立文件<br />   f = new File(new URI( NODE_ADAPTOR_PATH + fileName));<br />   f.createNewFile();<br />   fos = new FileOutputStream(f);<br />   fos.write(fo.fileContent);<br />   returnValue = true;<br />  }<br />  catch (Exception ex)<br />  {<br />   ex.printStackTrace();<br />   throw ex;<br />  }<br />  finally<br />  {<br />   if (fos != null)<br />   {<br />    try<br />    {<br />     fos.close();<br />    }<br />    catch (Exception ee)<br />    {<br />     ee.printStackTrace();<br />    }<br />   }<br />  }<br />  return returnValue;<br /> }<br />}<br /><br />7、建立 TestFileUpload.java 类，用于测试文件上传，代码如下：<br /><br />package com.sample.upload.test;</p>
		<p>import java.io.File;<br />import java.io.FileInputStream;</p>
		<p>import com.sample.jmxagent.jboss.RMIAdaptorHelper;<br />import com.sample.upload.mbean.FileObject;</p>
		<p>public class TestFileUpload<br />{<br /> private static RMIAdaptorHelper rah;</p>
		<p> /**<br />  * 向 Jboss 上传指定目录的文件<br />  */<br /> public static void uploadFile(String fileName) throws Exception<br /> {<br />  File f = new File(fileName);<br />  byte[] b = new byte[(int) f.length()];<br />  FileInputStream fis = new FileInputStream(f);<br />  try<br />  {<br />   fis.read(b);<br />   FileObject fo = new FileObject();<br />   fo.fileContent = b;</p>
		<p>   RMIAdaptorHelper.RmiInvokeObject rmido = rah.new RmiInvokeObject();<br />   rmido.setJndiname("com.sample.remotedeploy.mbean.control:service=FileUpload");<br />   rmido.setMethodname("uploadFile");<br />   rmido.setMethodArgsType(new String[]{"java.lang.String",<br />     "com.sample.upload.mbean.FileObject"});<br />   rmido.setMethodArgs(new Object[]{f.getName(), fo});<br />   rah.invoke(rmido);<br />  }<br />  catch (Exception ex)<br />  {<br />   ex.printStackTrace();<br />  }<br />  finally<br />  {<br />   if (fis != null)<br />   {<br />    try<br />    {<br />     fis.close();<br />    }<br />    catch (Exception ee)<br />    {<br />     ee.printStackTrace();<br />    }<br />   }<br />  }<br /> }</p>
		<p> public static void main(String[] args)<br /> {<br />  try<br />  {<br />   rah = new RMIAdaptorHelper("127.0.0.1", 1099, 5000);<br />   // 连接 Jboss rmi 服务器<br />   rah.connect();<br />   // 向 Jboss 上传指定目录的文件<br />   uploadFile(args[0]);<br />  }<br />  catch (Exception e)<br />  {<br />   e.printStackTrace();<br />  }<br />  System.exit(0);<br /> }<br />}<br /><br />8、在Jboss的安装目录server\default\deploy下建立 com.sample.sar\META-INF目录，并在其下建立两个文件jboss-service.xml 和 MANIFEST.MF ，用于把方法部署到Jboss中，jboss-service.xml 代码如下：<br /><br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;server&gt;<br /> &lt;mbean <br />  code="com.sample.upload.mbean.FileUpload" <br />  name="com.sample.remotedeploy.mbean.control:service=FileUpload"&gt;<br /> <br />  &lt;depends&gt;jboss.system:service=Logging,type=Log4jService&lt;/depends&gt;</p>
		<p>  &lt;!-- jboss.rmi --&gt;<br />  &lt;depends&gt;jboss.rmi:type=RMIClassLoader&lt;/depends&gt;</p>
		<p>  &lt;!-- jboss jmx --&gt;<br />  &lt;depends&gt;jboss.jmx:name=Invoker,type=adaptor&lt;/depends&gt;<br />  &lt;depends&gt;jboss.jmx:name=Invoker,protocol=jrmp,service=proxyFactory,type=adaptor&lt;/depends&gt;<br />  &lt;depends&gt;jboss.jmx:alias=jmx/rmi/RMIAdaptor&lt;/depends&gt;</p>
		<p>  &lt;!-- jboss.security --&gt;<br />  &lt;depends&gt;jboss.security:service=JaasSecurityManager&lt;/depends&gt;<br />  &lt;depends&gt;jboss.security:service=SecurityConfig&lt;/depends&gt;<br />  &lt;depends&gt;jboss.security:service=XMLLoginConfig&lt;/depends&gt;</p>
		<p>  &lt;!-- jboss --&gt;<br />  &lt;depends&gt;jboss:service=ClientUserTransaction&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=Naming&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=ClientUserTransaction&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=TransactionManager&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=UUIDKeyGeneratorFactory&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=invoker,type=jrmp&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=proxyFactory,target=ClientUserTransaction&lt;/depends&gt;<br />  &lt;depends&gt;jboss:service=proxyFactory,target=ClientUserTransactionFactory&lt;/depends&gt;</p>
		<p> &lt;/mbean&gt;<br />&lt;/server&gt;<br /><br /><br />9、MANIFEST.MF 代码如下：<br /><br />Manifest-Version: 1.0<br />Ant-Version: Apache Ant 1.6.2<br />Created-By: 1.4.2_05-b04 (Sun Microsystems Inc.)<br /><br />10、此时把所有Java编译后的class文件打包成 com.sample.jar 并拷贝到Jboss安装目录 server\default\lib 下，启动Jboss（即运行bin目录下的run.bat），再运行 TestFileUpload.java 程序进行测试（带入参数为要上传文件及完整目录名，如 java com.sample.upload.test.TestFileUpload E:\test.txt 注意引入-Classpath变量），则文件会上传到Jboss的server\default目录中。<br /><br />   希望大家有所收获。</p>
<img src ="http://www.blogjava.net/hengheng123456789/aggbug/96275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hengheng123456789/" target="_blank">哼哼</a> 2007-01-27 15:46 <a href="http://www.blogjava.net/hengheng123456789/archive/2007/01/27/96275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>