【CF 应用开发大赛】乐窝-开发布署全过程(二)

黄平俊 发布于 2013/01/05 15:17
阅读 1K+
收藏 5

本篇主要介绍一下乐窝的总体目录结构和解决数据库连接问题。

乐窝整体目录如下:

1、Java的源码包和依懒的Jar包图


2、总目录和Web目录:如下图

3、使用获取数据库连接的问题。

     使用常规的JDBC进行连接数据库,正常情况下,配制都正确如下:

jdbc:mysql://127.0.0.1:10100/d0703fa8f4cd04810b9521c2c7c047bc4?username/sample_db?user=ulLQZb7qlSmD8&password=pj1UDuD2PL3W5
使用Java本身的JDBC是获取不到数据库连接的,但使用Navicate是可以正常连接到数据库的。后来认真的查阅:https://github.com/cloudfoundry/vcap-java/tree/master/cloudfoundry-runtime   ,感谢 @tsl0922 提供。

获取数据库连接必须使用CF提供接口才能正确的获取到DataSource,源码如下:
RdbmsServiceInfo mysql = new CloudEnvironment().getServiceInfo("lewole", RdbmsServiceInfo.class);
RdbmsServiceCreator ds = new RdbmsServiceCreator();
dataSource = ds.createService(mysql);
相应的类都在 org.cloudfoundry.runtime.env 和 org.cloudfoundry.runtime.service 这两个包中可以找到。

4、编译并布署

    乐窝使用ANT进行编译布署的,以下是编译布署的配制文件build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="build" name="lewole">
	<property name="debug" value="true"/>
    <property name="target" value="1.5"/>
    <property name="source" value="1.5"/>
	<property name="encoding" value="UTF-8"/>
	<property name="build.app"  value="webapps" />
    <property name="build.classes.dir" value="webapps/WEB-INF/classes"/>
 
    <path id="lewole.classpath">
        <pathelement location="${build.classes.dir}"/>
		<fileset dir="packages" includes="*.jar" />
		<fileset dir="webapp/WEB-INF/lib" includes="*.jar" />
    </path>
	<!-- 创建目标文件 ,注意:禁目复盖和COPY  上传目录(uploads),索引目录(WEB-INF/ -->
    <target name="init">
     	<copy includeemptydirs="false" todir="${build.app}">
     		<fileset dir="webapp">
     			<exclude name="WEB-INF/lucene_idx/**" />
     			<exclude name="uploads/**" />
     			<exclude name="**/*.svn" />
     			<exclude name="**/*.js" />
     		</fileset>
      	</copy>
    	<copy includeemptydirs="false" todir="${build.classes.dir}">
            <fileset dir="src" excludes="**/*.launch, **/*.java"/>
    		<fileset dir="crawl" excludes="**/*.launch, **/*.java"/>
            <fileset dir="properties" excludes="**/*.launch, **/*.java"/>
        </copy>
    </target>
	
	<!-- 编译源文件 init ,js-local,compres-js-css -->
    <target depends="init" name="build">
        <javac debug="${debug}" encoding="${encoding}" destdir="${build.classes.dir}" source="${source}" target="${target}" includeantruntime="false" >
            <src path="properties"/>
            <src path="src"/>
        	<src path="crawl" />
            <classpath refid="lewole.classpath"/>
        </javac>
    </target>
	<!-- JS 中文进行本地化  -->
	<target name="js-local">
	   <native2ascii encoding="UTF-8" src="webapp" dest="${build.app}">
			<include name="js/**/*.js" />
	   	    <include name="themes/**/*.css" /> 
	   	</native2ascii>
 	</target>
	<!-- 压缩js,css -->
	<target name="js" depends="js-local" description="压缩 js css 文件">
 		<taskdef name="yuicompress" classname="com.yahoo.platform.yui.compressor.YUICompressTask">
			<classpath>
				<path refid="lewole.classpath"/>
			</classpath>
		</taskdef>
		<yuicompress linebreak="300" warn="false" munge="yes" preserveallsemicolons="true" outputfolder="${build.app}">
			<fileset dir="${build.app}">
  				<include name="css/**/*.css" />
				<!-- <include name="themes/**/*.css" /> -->
				<include name="js/*.js" />
				<include name="js/common/*.js" />
				<include name="js/m/*.js" />
				<include name="js/**/*.css" />
  			</fileset>
   		</yuicompress>
	</target>
	
     <target name="clean">
        <delete dir="${build.classes.dir}"/>
    </target>
</project>
除了编译源码后,还压缩混淆了JS和CSS文件。布署的时侯,直接把webapps同步到CF环境即可完成。

OSC的活动大赛已开始投票了: http://www.oschina.net/cf-app-show  对乐窝有兴趣的同学,请投乐窝一票!

加载中
0
sunyh
sunyh
mysql的用户名 和  密码  端口 怎么确定?
黄平俊
黄平俊
都不用管MySQL的用户名和密码,直接从API直接获取DataSource
0
michaelxv
michaelxv
请问楼主RdbmsServiceInfo这个类是自己写的还是runtime包里面的啊,我下载的runtime-0.6.0包中没有啊。
黄平俊
黄平俊
是CF提供的
0
三国vip
三国vip
话说 Cloud Foundry没法自己创建数据库吗?
三国vip
三国vip
我知道啊,但是好像只能创建表,不能创建数据库
黄平俊
黄平俊
可以创建的,可直接使用Navicat连上去
返回顶部
顶部