计算机程序虚拟的人生
虚拟世界中的游魂

  这个文档的作者是夏昕。先看看这个文档的内容,在作出评论!! 
  看了spring初探这一章,给我的感觉就是利用java的反射机制,和hibernate差不多!!
 
  控制反转 IOC(Inversion of control):由容器控制程序之间的关系,而非传统实现中,有程序直接操控。
  依赖注入DI(Dependency injection):组件之间的依赖关系由容器在运行期决定,即由容器动态的将某种依赖关系注入到组件中。
 
 依赖注入的特性:依赖注入机制减轻了组件之间的依赖关系,同时也大大地提高了组件的可移植性,这意味组件得到重用的机会将会更多!

 注入主要有:接口方式、参数方式、构造方式,其实我觉得参数和构造应该都属于参数传值的方式。 
 
 什么叫热部署?
      热部署指的是配置文件修改后自动被容器读取,无需重新启动应用服务器。

<beans>
     <description>Spring Quick Start</description>
     <bean id="messageSource"
               class="org.springframework.context.support.ResourceBundleMessageSource">
           <property name="basenames">
              <list>
                    <value>messages</value>
              </list>
           </property>
      </bean>
</beans>
这里声明了一个名为messageSource的Bean(注意对于Message定义,Bean ID必须为messageSource,这是目前Spring的编码规约),对应类为ResourceBundleMessageSource,目前Spring中提供了两个MessageSource接口的实现,即ResourceBundleMessageSourceReloadableResourceBundleMessageSource后者提供了无需重启即可重新加载配置信息的特性

注意:实际上Spring实用了jdk中的ResourceBundle来读取配置文件

对于属性文件中的国际化中文问题:可以利用JDK中的转码工具native2ascii.exe来进行转换
posted @ 2009-06-22 15:49 小兄弟(Robbins) 阅读(237) | 评论 (0)编辑 收藏
 
   从hibernate的概要图上可以看出hibernate的主要是将对象模型转换成关系模型的过程。
第二章看完了,感觉框架中涉及的关键性概念及作用要记住:
SessionFactory(org.hibernate.SessionFactory)
   针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。它是生成Session的工厂,本身要用到ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据提供可选得二级缓存。
Session(org.hibernate.Session)
   表示应用程序与持久存储层之间交互操作的一个单线程对象,此对象生存期很短。其隐藏了JDBC连接,也是Transaction的工厂。其会持有一个针对持久化对象的必选(第一级)缓存,在遍历对象图或者根据持久化标识查找对象时会用到。
-----------------------------------------------------------------------------------------------------------------
目前好像没有什么感觉!!

什么瞬态(transient)\什么持久化(persistent)\什么脱管(detached)
把一个对象说的这么理论化,不知为何???
                                      
posted @ 2009-06-22 15:12 小兄弟(Robbins) 阅读(111) | 评论 (0)编辑 收藏
 
    我找来一本《hibernate的参考手册-翻译版本》
    我访问http://www.hibernate.org.cn ,既然目前处于域名转让???不知何解!可能已经不用了,网上有些人说已经转向www.javaeye.com上了。
 
   还有个网站:http://www.java99.com/
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   例子:
          使用JAVA 数据库(HSQL DB)

          运行Hibernate所使用的最小的jar为:
                  antlr.jar;cglib.jar;asm.jar;asm-attrs.jar;commons-collections.jar;commons-logging.jar;ehcache.jar;hibernate3.jar;jta.jar;dom4j.jar;log4j.jar
          其中第三方库jar需要看自身使用的情况而定。 

 hibernate是通过反射机制来实例化javaBean,javaBean中默认构造函数是不带参数的
 hibernate主要依赖于映射文件将对象模型转换成关系模型。hibernate的配置文件中的DTD文件放在hibernate3.jar包中。 

 标识符生成策略:
<hibernate-mapping>
  <class name="events.Event" table="EVENTS">
     <id name="id" column="EVENT_ID">
         <generator class="native"/>
     </id>
  </class>
</hibernate-mapping>

native:根据已配置的数据库(方言)自动选择最佳的标识符生成策略。

看完了第一章内容,感觉所讲的东西只是传达一个比较初略的了解。其实第一章内容根本没有很多必要写出来。
posted @ 2009-06-22 10:27 小兄弟(Robbins) 阅读(128) | 评论 (0)编辑 收藏
 
project
<project name="" default="" basedir="">
</project>

name:工程名称
default:构建文件中的一个目标名,如果在命令行没有指定目标,则使用默认的目标
basedir:定义工程的根目录,一般情况下为"."
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
target
以下目标将编译一组文件,并将它们打包到一个名为finallib.jar的文件中
<target name="build-lib">
  <javac srcdir="${src.ejb.dir}:${src.java.dir}"
             destdir="${build.dir}"
             debug="on"
             deprecation="on"
             includes="**/*.java"
             excludes="${global.exclude}">
      <classpath>
         <pathelement location="."/>
         <pathelemetn location="${lib.dir}/somelib.jar"/>
      </classpath>
   </javac>
   <jar jarfile="${dist}/lib/finallib.jar" basedir="${build.dir}"/>
</target>
-------------------------------------------------------------------
<copy todir="${weblogic.dir}/${weblogic.server.home}/public_html/jsp">
  <fileset dir="${src.www.dir}/jsp"/>
</copy>
-------------------------------------------------
相关概念:
特性(property):在构建文件中由<property>标签表示的名-值对
DataType:一类表示复杂数据集合的元素,例如fileset和path
数据元素(data element):这个词涵盖了特性和DataType

property
<property name="my.first.property" value="ignore me"/>
<property file="user.properties"/>

<property name="property.one" value="one"/>
<property name="property.two" value="${property.one}:two"/>
--------------------------------------------------------------------
<path id="classpath">
  <fileset dir="${lib.dir}">
      <include name="**/*.jar"/>
  </fileset>
</path>
-------------------------------------------------
<target name="" depends="bot">
 <mkdir dir="${doc.dir}/api"/>
 <javadoc packagenames="irssibot.*"
                sourcepath="${src.dir}"
                destdir="${doc.dir}/api"
                author="true"
                version="true"
                use="true">
       <classpath refid="classpath"/>
    </javadoc>
</target>
------------------------------------------------------------
<target name="clean">
    <delete>
        <fileset dir="${build.classes}" includes="**/*.class"/>
    </delete>
 </target>

<target name="cleanall" depends="clean">
   <delete dir="${build.dir}"/>
   <delete dir="${dist.dir}"/>
   <delete dir="${doc.dir}/api"/>
</target>
posted @ 2009-06-19 10:27 小兄弟(Robbins) 阅读(108) | 评论 (0)编辑 收藏
 
这一章没有什么新意。但是有一个点就是网络任务需要关注一下

真搞不懂,一本书怎么写这么多的文字,简直多余!!
一个ANT写这么厚?????
posted @ 2009-06-18 16:56 小兄弟(Robbins) 阅读(90) | 评论 (0)编辑 收藏
 

我看的书籍是<Ant权威指南>,Ant的开发者:James Duncan Davidson。对于一些比较重要的内容我记录了下来:
ANT命令行参考
ant [option [option...]] [target [target...]]
option :={-help:显示描述Ant命令及其选项的帮助信息
               -projecthelp:显示包含在构建文件中的、所有用户编写的帮助文档。即为各个<target>中description属  性的文本,以及包含在<description>元素中的任何文本。将有description属性的目标列为主目标("Main target"),没有此属性的目标则列为子目标("subtarget")
               -version:要求Ant显示其版本信息,然后退出
               -quiet:抑制并非由构建文件中的echo任务所产生的大多数信息
               -verbose:显示构建过程中每个操作的详细消息。此选项与-debug选项只能选其一
               -debug:显示Ant和任务开发人员已经标志为调试消息的消息。此选项与-verbose只能选其一
               -emacs:对日志消息进行格式化,使它们能够很容易地由Emacs的shell模式(shell-mode)所解析;也就是说,打印任务事件,但并不缩排,在其之前也没有[taskname]
               -logfile filename:将日志输出重定向到指定文件
               -logger classname:指定一个类来处理Ant的日志记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger接口
               -listener classname:为Ant声明一个监听类,并增加到其监听者列表中。在Ant与IDE或其他Java程序集成时,此选项非常有用
               -buildfile filename:指定Ant需要处理的构建文件。默认的构建文件为build.xml
               -Dproperty=value:在命令行上定义一个特性名--值对
               -find filename:指定Ant应当处理的构建文件。与-buildfile选项不同,如果所指定文件在当前目录中未找到,-find就要求Ant在其父目录中再进行搜索。这种搜索会继续在其祖父目录中进行,直至达到文件系统的根为止,在此如果文件还未找到,则构建失败
               }

posted @ 2009-06-18 13:57 小兄弟(Robbins) 阅读(138) | 评论 (0)编辑 收藏
 
     突然想学习学习Java-PetStore2.0,感觉比较有趣,学习一个Java-PetStore就涉及到GlassFish2.1、db-Derby-10.1.2.1、IDE-NetBeans6.5.1、Ant1.7.1,一堆的工具,java-PetStore2.0是一个netBeans工程,直接使用NetBeans就可以打开,也可以使用Ant操作;工程中所涉及的服务器GlassFish和数据库Derby,NetBeans都已经为你准备好了。
     ANT一直都没有好好的去学习过,现在打算先把ANT看看!!


-------------------------------------------------------------------------------------------
    在开发的过程中,我们可能需要将生产环境和调试环境分开来,这样才能保证安全性,但是安装两个glassfish又不太可能,因为它太庞大了。另外做为一个工程发布也不太方便,每次都要将工程名改来改去,并且绑定的EJB在同一个域内里是不能同名的。这样的话,要改变的东西实在是太多了。
    我们可有以第三种方法,那就是为glassfish添加另外的domain,一个domain跑我们的真实环境,一个domain跑我们的测试环境,因为是同一个glassfish,所以也不会存在从测试到真实环境的移植问题。以后只要改一个domain就可以了。我们在安装glassfish的时候,它已经默认为我们安装了一个domain,那就是domain1.
    我们查看setup.xml里面可以看出,是如何新建domain的,于是我们把我们需要的一些target提取了出来,见如下。下面的配置里面唯一可能需要改变的就是glassfish安装目录这个属性了,其它可以按照我配的来,也可以自己修改。

<?xml version="1.0" encoding="UTF-8"?>
<project name="createDomain" default="create.domain" basedir=".">
<target name="setEnv">
    
<property name="domain.name" value="domain3"/>
    
<property name="admin.user" value="admin"/>
    
<property name="admin.password" value="adminadmin"/>
    
<property name="admin.port" value="6848"/>
    
<property name="instance.port" value="10080"/>
    
<property name="orb.port" value="5700"/>
    
<property name="imq.port" value="9676"/>
    
<property name="https.port" value="10181"/>

    
<property name="iiop.ssl" value="5821"/>  
    
<property name="iiop.mutualauth" value="5921"/>  
    
<property name="jmx.admin" value="10687"/>  

    
<property name="install.home" value="C:/Program Files/glassfish-v2ur2"/>
    
<property name="adminpassfile" value="${install.home}/passfile"/>
    
<property name="ASADMIN" value="${install.home}/bin/asadmin.bat"/>
    
<echo file="${adminpassfile}" append="false">AS_ADMIN_ADMINPASSWORD=${admin.password}</echo>
</target>
<target name="create.domain" depends="setEnv">
    
<exec executable="${ASADMIN}" failonerror="true">
        
<arg line="create-domain" />
        
<arg line="--adminport ${admin.port}" />
        
<arg line="--instanceport ${instance.port}" />
        
<arg line="--user ${admin.user}" />
        
<arg line="--passwordfile &quot;${adminpassfile}&quot;" />
        
<arg line="--domainproperties orb.listener.port=${orb.port}:jms.port=${imq.port}:http.ssl.port=${https.port}:domain.jmxPort=${jmx.admin}:orb.ssl.port=${iiop.ssl}:orb.mutualauth.port=${iiop.mutualauth}" />
        
<arg line="--savelogin" />
        
<arg line="${domain.name}" />
    
</exec>
    
<delete file="${adminpassfile}" />
</target>
</project>


然后用ant执行它就可以了,我这里的执行输出如下:

C:\Program Files\glassfish-v2ur2>ant
Buildfile: build.xml

setEnv:

create.domain:
     [exec] Using port 6848 for Admin.
     [exec] Using port 10080 for HTTP Instance.
     [exec] Using port 9676 for JMS.
     [exec] Using port 5700 for IIOP.
     [exec] Using port 10181 for HTTP_SSL.
     [exec] Using port 5821 for IIOP_SSL.
     [exec] Using port 5921 for IIOP_MUTUALAUTH.
     [exec] Using port 10687 for JMX_ADMIN.
     [exec] Domain being created with profile:developer, as specified by variabl
e AS_ADMIN_PROFILE in configuration file.
     [exec] The file in given locale [zh_CN] at: [C:\Program Files\glassfish-v2u
r2\lib\install\templates\locales\zh_CN\index.html] could not be found. Using def
ault (en_US) index.html instead.
     [exec] Security Store uses: JKS
     [exec] Domain domain3 created.
     [exec] Login information relevant to admin user name [admin] for this domai
n [domain3] stored at [C:\Documents and Settings\hadeslee\.asadminpass] successf
ully.
     [exec] Make sure that this file remains protected. Information stored in th
is file will be used by asadmin commands to manage this domain.
   [delete] Deleting: C:\Program Files\glassfish-v2ur2\passfile

BUILD SUCCESSFUL
Total time: 21 seconds
C:\Program Files\glassfish-v2ur2>


这样我们就可以看到glassfish的domains目录下面,多出了一个domain3这个文件夹。然后有关数据库连接池啊什么的,就可以到该目录下面的config/domain.xml去改了,domain.xml里面的属性我们以后有时候再好好研究一下。当然,我们也可以去glassfish的控制台进行可视化修改,glassfish的控制台是所有的应用服务器里面做得最好的一个了。访问的端口就是我们新建domain的时候用到的admin.port的这个属性。
posted @ 2009-06-18 10:43 小兄弟(Robbins) 阅读(737) | 评论 (0)编辑 收藏
 
三种依赖范围:compiletestprovided,runtime,test,system

compile(编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

provided(已提供范围)

provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。

runtime(运行时范围)

runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

test(测试范围)

test范围依赖在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

system(系统范围)

system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

 
依赖版本界限:
(?, ?) 不包含量词。意思为:?<xx<?
[?, ?] 包含量词。意思为:?<=xx<=?
例如:指定一个依赖界限:JUnit 3.8 - JUnit 4.0
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>
 
posted @ 2009-06-07 22:28 小兄弟(Robbins) 阅读(559) | 评论 (0)编辑 收藏
 
查看有效的pom—〉mvn help:effective-pom
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Maven中的版本包含了以下部分:主版本,次版本,增量版本,和限定版本号;一个版本中,这些部分对应如下的格式:
<major version>.<minor version>.<incremental version>-<qualifier>
Maven提供了三个隐式的变量,可以用来访问环境变量,POM信息,和Maven Settings.

env变量:暴露了你操作系统或者shell的环境变量

project变量暴露了POM

settings变量暴露了Maven settings信息。

除了这三个隐式的变量,你还可以引用系统属性,以及任何在Maven POM中和构建profile中自定义的属性组
 
自定义属性:
<properties>
<foo>bar</foo>
</properties>

 

 

posted @ 2009-06-07 22:10 小兄弟(Robbins) 阅读(114) | 评论 (0)编辑 收藏
 

超级POM
所有的Maven项目的POM都扩展自超级POM。你可以在${M2_HOME}/lib中的maven-2.0.9-uber.jar文件中找到pom-4.0.0.xml
超级pom:
<project>
  <modelVersion>4.0.0</modelVersion>
  <name>Maven Default Project</name>

  <repositories>
    <repository>
      <id>central</id>
      <name>Maven Repository Switchboard</name>
      <layout>default</layout>
      <url>http://repo1.maven.org/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

  <build>
    <directory>target</directory>
    <outputDirectory>target/classes</outputDirectory>
    <finalName>content-zh-0.5</finalName>
    <testOutputDirectory>target/test-classes</testOutputDirectory>
    <sourceDirectory>src/main/java</sourceDirectory>
    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
      </testResource>
    </testResources>
  </build>

      <pluginManagement>
       <plugins>
         <plugin>
           <artifactId>maven-antrun-plugin</artifactId>
           <version>1.1</version>
         </plugin>      
         <plugin>
           <artifactId>maven-assembly-plugin</artifactId>
           <version>2.2-beta-1</version>
         </plugin>
         <plugin>
           <artifactId>maven-clean-plugin</artifactId>
           <version>2.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>2.0.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-dependency-plugin</artifactId>
           <version>2.0</version>
         </plugin>
         <plugin>
           <artifactId>maven-deploy-plugin</artifactId>
           <version>2.3</version>
         </plugin>
         <plugin>
           <artifactId>maven-ear-plugin</artifactId>
           <version>2.3.1</version>
         </plugin>
         <plugin>
           <artifactId>maven-ejb-plugin</artifactId>
           <version>2.1</version>
         </plugin>
         <plugin>
           <artifactId>maven-install-plugin</artifactId>
           <version>2.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-jar-plugin</artifactId>
           <version>2.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-javadoc-plugin</artifactId>
           <version>2.4</version>
         </plugin>
         <plugin>
           <artifactId>maven-plugin-plugin</artifactId>
           <version>2.3</version>
         </plugin>
         <plugin>
           <artifactId>maven-rar-plugin</artifactId>
           <version>2.2</version>
         </plugin>
         <plugin>               
           <artifactId>maven-release-plugin</artifactId>
           <version>2.0-beta-7</version>
         </plugin>
         <plugin>               
           <artifactId>maven-resources-plugin</artifactId>
           <version>2.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-site-plugin</artifactId>
           <version>2.0-beta-6</version>
         </plugin>
         <plugin>
           <artifactId>maven-source-plugin</artifactId>
           <version>2.0.4</version>
         </plugin>        
         <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.4.2</version>
         </plugin>
         <plugin>
           <artifactId>maven-war-plugin</artifactId>
           <version>2.1-alpha-1</version>
         </plugin>
       </plugins>
     </pluginManagement>
 
  <reporting>
    <outputDirectory>target/site</outputDirectory>
  </reporting>
</project>

1).默认的超级POM定义了一个单独的远程Maven仓库,ID为central,这是所有Maven客户端默认配置访问的中央Maven仓库;该配置可以通过一个自定义的settings.xml文件来覆盖,注意这个默认的超级POM关闭了从中央Maven仓库下载snapshot构件的功能。如果你需要使用一个snapshot仓库,你就要在你的pom.xml或者settings.xml中自定义仓库设置.
2)build元素设置Maven标准目录布局中那些目录的默认值.
3)POM中定义的groupIdartifactIdversion:这三项是所有项目都需要的坐标

groupId

一个groupId归类了一组相关的构件。组定义符基本上类似于一个Java包名。例如:groupId org.apache.maven是所有由Apache Maven项目生成的构件的基本groupId。组定义符在Maven仓库中被翻译成路径,例如,groupId org.apache.maven可以在repo1.maven.org/maven2/org/apache/maven目录下找到。

artifactId

artifactId是项目的主要定义符。当你生成一个构件,这个构件将由artifactId命名。当你引用一个项目,你就需要使用artifactId来引用它。artifactIdgroupId的组合必须是唯一的。换句话说,你不能有两个不同的项目拥有同样的artifactIdgroupId;在某个特定的groupId下,artifactId也必须是唯一的。

version

当一个构件发布的时候,它是使用一个版本号发布的。该版本号是一个数字定义符如“1.0”,“1.1.1”,或“1.1.2-alpha-01”。你也可以使用所谓的快照(snapshot)版本。一个快照版是一个处于开发过程中的组件的版本,快照版本号通常以SNAPSHOT结尾;如,“1.0-SNAPSHOT”,“1.1.1-SNAPSHOT”,和“1-SNAPSHOT”。Section 9.3.1, “项目版本”介绍了版本和版本界限。


 

posted @ 2009-06-07 21:50 小兄弟(Robbins) 阅读(278) | 评论 (0)编辑 收藏
仅列出标题
共3页: 上一页 1 2 3 下一页