◎筱米加步枪◎.Blog

Happy coding

"远程计算机或设备将不接受连接"问题解决方法

在公司不知做了什么操作突然间不能上网了。IE8诊断结果显示:"远程计算机或设备将不接受连接"。

请人帮忙得以解决,解决方法如下:

【工具】>>【Internet选项】>>【连接】【局域网设置】中把(代理服务器下的"为LAN使用代理服务器(这些设置不用于拨号或VPN连接)")的勾去掉 即可

 

此计算机上没有运行windows无线服务 解决方案

电脑出现如下问题:

1.开机超级慢

2.开机后出现黄屏

3.无线网络不能用,诊断出现如下错误:

此计算机上没有运行windows无线服务 

百度解决方案:

运行输入netsh winsock reset 重启电脑即可.

hoho...

64位Windows7下安装Oralce10g客户端过程.

本想尝试在不安装客户端的情况下使用PLSQL访问数据库服务器 .但是后来还是失败了.

于是在Windows7(64位)下安装了Oracle10g的客户端后,使用PLSQL尝试连接,总提示一个空白框.很无奈.百度谷歌了许久才找到解决方法.

摘自网上的:

1.到oracle官网下载Oracle InstantClient,我下的是instantclient-basiclite-win32-10.2.0.4.zip,把它解压缩到oracle安装目录product下,其中还有一个目录为10.2.0.在其中的db_1/NETWORK/ADMIN目录下拷贝tnsnames.ora文件到InstantClient解压目录.
2.非登录状态下进入PL/SQL developer,进入首选项,在connection中设置Oracle_Home和OCI Library,其中Oracle_Home设置为InstantClient的解压目录,OCI Library设置为该目录下的oci.dll.

最后设置环境变量:

set path=instantclient的路径
set TNS_ADMIN=tnsnames.ora文件的目录

使用PLSQL尝试登录,成功.

PS:如果出现ORA-12705:无法访问NLS数据文件,或者指定的环境无效错误,把环境变量中NLS_LANG的变量删除掉

Sping中自定义默认注解名生成器

在类中贴上@Repository等标签,相当于在Spring容器里定义了一个Bean类,这个Bean的名称如果不指定名称,将默认使用当前类名(不含包名)的首字母小写作为Bean的名字.

需求:

要确保这个Bean名称要唯一,显然这样定义的Bean名称太过简单,比较容易造成一样情况,如果能使用全类名作为Bean可防止这样的情况,因为不存在全类名一样的类.例如:org.kirinsoft.frame.AClass

技术实现:

指定定义一个Bean名字生成器,实现Spring提供的BeanNameGenerator,在generateBeanName方法中设计出自己需要的Bean名称.

另外在Spring配置文件中的自动注解配置要指定名字生成器类,如:

	<!-- 自动注解配置 -->
	<context:annotation-config />
	<context:component-scan base-package="com.kirinsoft.frame"
		name-generator="com.kirinsoft.frame.pub.UniqueBeanNameGenerator" />

具体实现方法:

/**
 * 唯一Bean名称生成器.以类全名作为Bean名称.
 */
public class UniqueBeanNameGenerator implements BeanNameGenerator{

	@Override
	public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
		return definition.getBeanClassName();
	}
}

 

Spring中事务的作用范围

下面一种情景:

在做项目中通常会进行分层架构.假设可分为Service、Biz、Dao3层.关系如下:

一个Service类调用多个Biz类,一个Biz调用多个Dao类完成业务逻辑.

基于这种情况,通常我们把事务控制到Service层.

很当然的引入Spring中配置:(其他配置略)

<property name="beanNames">
            <list>
                <value>*ServiceImpl</value>
            </list>
        </property>

 

那么,引入一个问题:如果同时对Service层和Biz层加入Spring的事务配置中,是哪一层起作用呢、?

换句话说,假设一个Service有两个Biz类,那么第一个Biz类操作成功,而第二个操作失败,此时第一个Biz是否有回滚呢。?

对应的Spring配置:

        <property name="beanNames">
            <list>
                <value>*ServiceImpl</value>
                <value>*BizImpl</value>
            </list>
        </property>

通过实验证明可得到结论:哪个包含的范围大,哪个事务起作用。

上面的假设,Service的事务起作用,第一个Biz会被回滚掉。

有关Hibernate中PO对象Blob字段的注解

PO对象中使用Hibernate注解方式进行映射.Blob字段描述如下:

1.首先PO对象中属性名可指定为byte数组(byte[])
   

private byte [] templateData;

2.在Setter方法中进行注解方式如下:

    @Lob
    @Basic(fetch = FetchType.LAZY)
    @Column(name = "TEMPLATE_DATA",columnDefinition="BLOB")
    public byte [] getTemplateData() {
        return this.templateData;
    }

 

有关Oracle中的Blob字段更新问题

先说下偶遇到的问题:

Oracle中我使用Blob字段来存一个Xml内容.新增一条记录正常,但是尝试用一条记录去更新已经存在的记录.

发现Blob中的字段中的内容并没有被更新掉.


网络上的一些朋友说原因如下:

假设Blob字段中已经存在的内容是100个字节,那么尝试用50字节的内容去更新,

那么得到的结果就是:前面50个字节被覆盖,而Blob仍然存在100个字节,其中后面50个字节是原先的后50个字节.


那么解决的方法如下:(证实可以通过)

先清空原Blob字段中的数据,再进行字节的写入.(与平常的更新操作会多了一步).

具体的更新方法如下:

UPDATE 表名 SET BLOB字段=EMPTY_BLOB() WHERE 条件.

然后再执行具体的更新SQL语句.

Velocity基础笔记

今天初步学了一下Velocity,顺手写了一些简单例子,主要是测试VTL(Velocity描述语言)的语法.

先来看看如何使用Velocity的:

//需要依赖的包:common.collections.jar,common-lang.jar
public class VeloccityTest {
	
	public static void main(String[] args) {
		//创建引擎
		VelocityEngine velocityEngine = new VelocityEngine();
		
		//设定输入输出编码可支持中文
		Properties prop = new Properties();
		prop.setProperty(Velocity.ENCODING_DEFAULT, "utf-8"); 
		prop.setProperty(Velocity.INPUT_ENCODING, "utf-8"); 
		prop.setProperty(Velocity.OUTPUT_ENCODING, "utf-8"); 
		
		//可以根据属性对象或者属性文件进行定义,原理是一样的.
		velocityEngine.init(prop);
		
		//取得VTL定义的文件获取模板对象
		Template template = velocityEngine.getTemplate("/src/template.vm");
		
		//新创一个Velocity上下文
		VelocityContext velocityContext = new VelocityContext();
		
		//放入VTL中定义的变量值
		velocityContext.put("name", "ChenST");
		velocityContext.put("address", "淘宝商城");
		
		List<String> products = new ArrayList<String>();
		products.add("百事可乐");
		products.add("可口可乐");
		//可放入一个ArrayList集合代表数组
		velocityContext.put("products", products);
		
		Map<String, String> map = new HashMap<String, String>();
		map.put("key", "mapValue");
		//可放入一个Map结构的对象
		velocityContext.put("map", map);
		
		People people = new People();
		people.setName("张三");
		//可放入一个自定义对象
		velocityContext.put("people", people);
		
		StringWriter stringWriter = new StringWriter();
		//根据模板定义的内容进行合并,并将结果输出给流对象
		template.merge(velocityContext, stringWriter);
		
		System.out.println(stringWriter.toString());
	}
}

接下来再来看看具体的VTL是如何定义和描述的,(习惯将一些学习过程写在代码中...)

#####这个是注释#####

#####parse脚本元素包含另一个VTL的本地文件######

测试解析:#parse("/src/other.vm")

#####include包含另外一个文件,只是文本包含,不进行解析######
测试文本包含:#include("/src/other.vm");

#####set脚本元素定义变量#####
#set($defaultDept = "技术部")

#####引用变量值,可以是VTL中指定的,也可以是Java程序中注入上下文的值#####
#####可以$name也可以${name},后者比较规范#####

测试获取变量值:你好, $name,欢迎来到 $address,默认部门:$defaultDept

#####判定元素if-else-end#####
#set($i = 1)
#set($j = 2)
#if( $i == $j)
测试判定元素:i值和j值相等
#else
测试判定元素:i值和j值不相等
#end

#####VTL变量的算数运算######
#set($plus = ${i}+${j})
#set($minus = ${i}-${j})
#set($multi = ${i}*${j})
#set($divis = ${i}/${j})
测试运算:
加法运算:结果:${plus}
减法运算:结果:${minus}
乘法运算:结果:${multi}
除法运算:结果:${divis}

#####foreach-end脚本元素用于循环操作,products是一个ArrayList#####
#####velocityCount变量的名字是Velocity默认的名字,可以通过修改velocity.properties文件来改变它###
#####directive.foreach.counter.name = velocityCount #####
#####directive.foreach.counter.initial.value = 1 #####

测试循环元素:
#foreach($product in $products)
第$velocityCount条记录 - ${product}
#end

#####使用.有两种含义,一种可以是HashMap,HashTable这种结构,另外一种可以是对象的属性值或者方法#####
测试Map的值:${map.key}
测试对象的值:${people.name}
测试对象方法:${people.call()}

#####macro元素标签可用于定义一个可重用的模板,如reTemp为模块名,可跟任意个参数#####
#macro(reTemp $parm1 $parm2)
测试定义可重用模板,参数:${parm1},${parm2}
#end
#####使用定义的可重用的模块#####
#reTemp(${i} ${j})

#####可以使用中括号操作符表示一个范围,默认增量为1#####
测试范围元素:
#foreach ( $foo in [3..1])
$foo
#end

#####$test和$!的区别:前者找不到时原串输出,后缀如果找不到输出空串#####
找不到test变量值输出:$test
找不到test变量值输出:$!test

另外一个被引用的文件

测试引用其他文件:你好, $name,欢迎来到 $address

感觉Velocity还是挺好的..可以自己一定一些模板,比如java代码,XML代码之类的都可以.可以自己试着做一些小工具,生成自己开发模式的一些代码.还可以结合Eclipse写一些小插件之类的。

 

Ant文件间脚本的调用

每个项目都有一个ant打包部署脚本,一个一个ant文件执行麻烦,需要有一个ant脚本统一调到这些ant文件,把这些ant文件给串起来.

贴个Ant文件间的调用脚本:(部分Ant脚本省略..有代表性的贴出些..)

svn.java.dir=.
svn.eframe.dir=${svn.java.dir}/EFrame
svn.workflow.dir=${svn.java.dir}/workflow
### jar dir ###
eframework.dir = ${svn.eframe.dir}/eframework
casclient.dir=${svn.eframe.dir}/casclient
### war dir  ###
CAS.dir = ${svn.eframe.dir}/CAS
e_workflowService.dir = ${svn.workflow.dir}/e_workflowService
<project basedir="." default="packageAll" name="allJar">
	<property environment="env" />
	<property file="build-all.properties" />
	
	<!-- 重建目录 -->
	<target name="rebuild">
		<delete dir="${basedir}/dist/lib" />
		<delete dir="${basedir}/dist/deploy"/>
		<mkdir dir="${basedir}/dist/lib"/>
		<mkdir dir="${basedir}/dist/deploy"/>
	</target>
	
	<!-- 调用其他项目的ant脚本(打jar包)-->
	<target name="packageJar" depends="rebuild">
		<ant antfile="build.xml" dir="${eframework.dir}"/>
		<ant antfile="build.xml" dir="${casclient.dir}"/>
	</target>
	
	<!-- 调用其他项目的ant脚本(打war包)-->
	<target name="packageWar" depends="packageJar">
		<ant antfile="build.xml" dir="${CAS.dir}"/>
		<ant antfile="build.xml" dir="${e_workflowService.dir}"/>
	</target>
	
	<target name="packageAll" depends="packageWar"/>
</project>

完毕..

使用Ant生成JBoss上部署项目的脚本

用Ant脚本打包部署项目,生成Jboss上部署后的文件信息.(跟MyEclipse部署到Jboss的效果一样)

搞了一天多..Ant不是很熟..贴个备忘下..

svn.lib.path=../../lib
svn.dist.path=../../dist
svn.target.lib=${svn.dist.path}/lib
svn.target.deploy=${svn.dist.path}/deploy
target.war.file=${svn.target.deploy}/EFrameWeb.war
busi.jars=e_workflowclient.jar,jbpmengineclient.jar
<project basedir="." default="deploy" name="EFrameWeb">
	<property environment="env" />
	<!-- 引用属性文件的属性定义 -->
	<property file="build.properties" />

	<property name="debuglevel" value="source,lines,vars" />
	<property name="target" value="1.6" />
	<property name="source" value="1.6" />
	<!-- 定义WebRoot路径 -->
	<property name="WebRoot.dir" value="${basedir}/WebRoot"/>
	<!-- 定义编译路径 -->
	<property name="compile.dir" value="${WebRoot.dir}/WEB-INF/classes"/>
	<!-- 定义源代码路径 -->
	<property name="src.dir" value="${basedir}/src"/>
	<!-- 定义项目所用到的其他包 -->
	<property name="lib.dir" value="${WebRoot.dir}/WEB-INF/lib"/>
	
	<!-- 定义生成的war包的classes路径 -->
	<property name="target.war.file.classes" value="${target.war.file}/WEB-INF/classes"/>
	<!-- 定义生成的war包的lib路径-->
	<property name="target.war.file.lib" value="${target.war.file}/WEB-INF/lib"/>
	
	
	<path id="appAPI.classpath">
		<!-- 包含项目中涉及到的业务包和工具包 -->
		<fileset dir="${svn.target.lib}">
			<include name="**/*.jar"/>
		</fileset>
		
		<!-- 包含项目中涉及到第三方开源包 -->
		<fileset dir="${svn.lib.path}">
			<include name="**/*.jar" />
		</fileset>
		
		<!-- 包含存在项目自身lib目录下的包 -->
		<fileset dir="${lib.dir}">
			<include name="**/*.jar" />
		</fileset>
	</path>
	<target name="clean">
		<delete dir="${compile.dir}" />
		<delete dir="${target.war.file}/" />
	</target>
	<target name="init" depends="clean">
		<mkdir dir="${target.war.file}" /> 
		<mkdir dir="${compile.dir}" />
		
		<!-- 属性信息 -->
		<echo message="${ant.project.name}: ${ant.file}" />
		
		<!-- 编译程序 -->
		<javac debug="true" 
			   includeantruntime="false" 
			   debuglevel="${debuglevel}" 
			   encoding="GBK" 
			   destdir="${compile.dir}" 
			   source="${source}" 
			   target="${target}">
			<src path="${src.dir}" />
			<classpath refid="appAPI.classpath" />
		</javac>
		
		<!-- 拷贝WebRoot下的东西 -->
		<copy includeemptydirs="false" todir="${target.war.file}">
			<fileset dir="${WebRoot.dir}">
				<exclude name="**/.svn" />
				<exclude name="**/*.launch" />
			</fileset>

		</copy>
		
		<!-- 拷贝项目classses非编译文件 -->
		<copy includeemptydirs="false" todir="${target.war.file.classes}">
			<fileset dir="${src.dir}">
				<exclude name="**/*.launch" />
				<exclude name="**/*.java" />
				<exclude name="**/.svn" />
			</fileset>
		</copy>

		<!-- 拷贝项目所依赖的业务包 -->
		<copy includeemptydirs="false" todir="${target.war.file.lib}">
			<fileset dir="${svn.target.lib}" includes="${busi.jars}"/>
		</copy>
	</target>

	<target name="deploy" depends="init"></target>
</project>