2007年10月16日

新注册了个独立域名,使用独立的blog了。

http://618119.com

rss订阅地址: http://feed.feedsky.com/lizongbo

从最早的 http://blog.csdn.net/lizongbo,

到 http://blog.donews.com/lizongbo

再到http://www.blogjava.net/lizongbo

现在终于拥有自己的域名和独立的blog了。

2006年01月26日

Tomcat启动的时候出现下面这样的提示:

2006-1-26 19:44:11 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Java\jdk1.5.0_05\bin;.;C:\WINDOWS\system32;C:\WINDOWS;d:\ruby\bin;.;..;D:\Java\jrockit-R26.0.0-jdk

实际这是建议使用apache的apr。

如果想使用apr的话, 实际操作很简单,

下载 http://tomcat.heanet.ie/native/1.1.1/binaries/win32/tcnative-1.dll

将这个文件复制到C:\WINDOWS\system32\下面

然后重新启动tomcat,就会发现tomcat 的控制台信息为:
2006-1-26 19:48:42 org.apache.coyote.http11.Http11AprProtocol init
信息: Initializing Coyote HTTP/1.1 on http-9080

详情见 http://tomcat.apache.org/tomcat-5.5-doc/apr.html

http://www.google.com/search?hl=zh-CN&newwindow=1&q=The+Apache+Tomcat+Native+library+which+allows+optimal+performance&btnG=%E6%90%9C%E7%B4%A2&lr=

2005年11月04日

Jbuilder开发

Jbuilder重要参数设置.

1.在jbuilder2006/bin/jdk.config 最后以行加上 vmparam -Dfile.encoding=GBK
2.在jbuilder2006/bin/jbuilder.config  59行 改为:socket 88888
3.在jbuilder2006/bin/jbuilder.config最后一行加上
  vmparam -Dprimetime.editor.useVariableWidthFont=true

结合vss开发
1.先从vss上取下工程
在Jbuilder中,菜单-〉File’new’在Object Gallery窗口中选中左边的Project,然后选Pull Project From VSS,然后点"OK".如下图:
 
2.接下来的窗口中,Directory填\\192.168.9.1\Source
 
3.填写vss的登录账号
 
4.选择即将导出的工程目录,如下图::
 
5.选择保存到本地的目录
 
6.在jbuilder2006中进行相关参数配置(这几个设置很重要,设置好之后可以减少很多不必要的麻烦):
a.设置工程的编码。
打开工程,主菜单-〉Project’Project Properties’General’Encoding,大家的编码一定要一致,避免乱码现象出现,因此建议统一设置为GBK.
 
b.设置需要自动复制的资源,由于工程中用到了xml,并且需要将其自动复制到classes目录下。
请将xml文件设置为Copy.记着要点ok 噢:)
 

c.设置class的生成版本
Taget VM要设置为1.4版本。
 
d.设置编译选项
把Generate source to output path的钩取掉
把Check JSPs for errors at build-time的钩取掉,这样可以加快编译调试的速度。
 
e.设置web应用中的资源复制。
选中Web App,然后点右键’Properties…
 
设置content,选择最上面的 Include all classes and resources
 

接下来就可以在工程中添加自己的模块了。
这样就可以在jbuilder里直接点右键队文件进行check add ,check in 和checkout了 .
注意jbuilder2006里与vss的状态同步没有jb2005好,如果用vss浏览器进行的check in 和out操作,在jbuilder2006里不能够及时体现。因此大家要点"刷新"图标进行状态同步
如图:
 


使用tomcat5.0
由于jbuilder2006中的tomcat5.5在部署的时候会自动复制多余的jar
导致web-inf/lib/下出现了jsp-api.jar和,serverlet-api.jar,这样会引起Failed to load or instantiate TagExtraInfo class:org.Apache.struts.taglib.html.MessagesTei之类的错误,因此在jbuilder中调试的话,可以先选择使用Tomcat5.0
在jb2006例添加server tomcat5.0的步骤如下。
1. 从jbuilder中提取jakarta-tomcat-5.0.27
a. 复制D:\borland\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27为
D:\borland\JBuilder2006\thirdparty\jakarta-tomcat-5.0.27
我已经把它压缩好放在了\\192.168.9.1\jakarta-tomcat-5.0.27.rar,复制过来解压到D:\borland\JBuilder2006\thirdparty\也可以。
b. 添加 server.
主菜单’Enterprise’configure Servers ‘选中Tomcat5.5,然后点左下角的Copy.
 
名字依然为Tomcat,版本改为5.0
如图:
 
如图,将tomcat5.0的home directory 设置为:D:\borland\JBuilder2006\thirdparty\jakarta-tomcat-5.0.27
这样就可以在jb2006使用tomcat5.0了。

 


2005年10月29日

winnt4.0上面配置tomcat5.5.10的注意事项

1.安装方法如下,直接复制在win2000下的jdk1.4和tomcat5.5.10的文件夹到winnt4.0
2.把文件夹名字改短,把j2sdk1.4.2_04改成jdk,jakarta-tomcat-5.5.10改成web,新文件夹名字必须在8个字符内。
3.winnt下获取环境变量好像有问题,因此需要编辑web\bin\startup.bat
在开头加上
set JAVA_HOME=c:\j2sdk
set CATALINA_HOME=c:\web
4.然后启动,一切ok了。

同一台机器上配置运行Tomcat集群的简便方法(节选)

然后启动tomcat的时候,通过命令行参数来启动。
比如:
 
D:\JAKART~1.10\bin>catalina run -config D:\jakarta-tomcat-5.5.10\conf\server80.xml
D:\JAKART~1.10\bin>catalina run -config D:\jakarta-tomcat-5.5.10\conf\server8080.xml
D:\JAKART~1.10\bin>catalina run -config D:\jakarta-tomcat-5.5.10\conf\server9080.xml

2005年09月28日

Jbuilder的TCP Monitor是用监视端口并转发数据的,

并且把客户请求和服务端请求的数据记录下来.

用它来分析http请求和回复非常方便,

而我巧妙的吧它用来做下面一件事情.

http://torrez.net/projects/konstructor/Konstructor.exe

是一个xmlrpc调试工具,美中不足的地方,是无法设置端口,

只能够用80端口访问,于是突然想到用TCP Monitor来进行端口转发.

用 TCP Monitor 监听80端口,并转发数据到远程的服务和指定端口.

呵呵

后来想到其实连这个调试工具都省了,直接用TCP Monitor来监视xmlrpc调用.

当然,也可以用IE的插件 ieHTTPHeaders 来分析http请求,但是ieHTTPHeaders 不记录content内容:(

2005年09月21日

tomcat5.5 中 JasperException: Failed to load or instantiate TagExtraInfo class:org.Apache.struts.taglib.html.MessagesTei

JasperException: Failed to load or instantiate TagExtraInfo class: com.acme.tag.IterateTEI

等等…

原因是 web-inf/lib/下出现了jsp-api.jar和,serverlet-api.jar,把它们删除,然后重新启动 web应用即可。

2005年08月23日

如果配置文件如下:

log4j.rootLogger=ERROR,CONSOLE

log4j.logger.com.lizongbo=DEBUG,CONSOLE

# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c{1} %x – %m%n

这样就会导致在控制台 输出两次.

连续输出两遍的感觉很不爽,其实只要把

log4j.rootLogger=ERROR,CONSOLE

这行注释掉即可.

相关讨论可以参考:

http://matrix.foresee.cn/blogs/neo/archives/001282.html

2005年06月15日


首先是要打上jbuilder 2005的 update4补丁,才能够支持设置Jboss4.0.x的Server.

但是设置好server之后,在jbuilder2005里无法直接编译jsp,

因此还需要在工程中再添加

D:\jboss-4.0.2\server\default\deploy\jbossweb-tomcat55.sar\下的

commons-el.jar,commons-modeler.jar,jasper-compiler.jar,jasper-compiler-jdt.jar,

然后还要把Jbuilder自带的lib ant 加入。这下就可以编译jsp了。

估计等jbuilder2005 的update5出来就会解决这个问题了。

jaxb 2.0
 
1.下载
jwsdp-1.5中包含的jaxb是1.0版本,最新的版本需要在https://jaxb.dev.java.net/下载:
当前版本的下载地址为:
https://jaxb.dev.java.net/files/documents/51/15728/jaxb_ri_20050606.jar
https://jaxb.dev.java.net/jaxb20-ea/jaxb_ri_20050407.jar
源代码为:
https://jaxb.dev.java.net/files/documents/51/15174/jaxb_ri_src_20050407.jar
2.安装
jaxb_ri_20050606.jar所在的目录下,进入命令行,
命令行下运行:java -jar jaxb_ri_20050606.jar’
然后会弹出授权协议窗口,必须把协议拉到底部,才可以点accept。
点accept之后上列出所有解压出来的文件名字。
此时,在当前目录下会有一个叫jaxb-ri-20050606的目录,里面有jaxb的jar文件和api文档。
3.根据schema文件xsd生成java文件的命令如下:

e:\javalibs\xmllibs\jaxb-ri-20050606\bin>xjc -d "e:\jb\jaxbdemo\src"  -p "com.lizongbo.jaxbdemo"  "e:\jb\jaxbdemo\jaxbtest.xsd"
由于jaxb2.0中生成的java文件使用的是jdk1.5的语法特性:
 
generics for type safe collections
enum type for binding of simple type with enumeration facets
better support for xml schema types using datatypes in jaxp 1.3
leveraging jaxp 1.3 validation for smaller footprint
more compact binding based on constraining facets defined in schema
(from http://weblogs.java.net/blog/sekhar/archive/2005/03/jaxb_20_early_d.html )
由于使用了j2se5.0的特性,jaxb2.0生成的java代码比jaxb1.0生成的要简洁得多了。
jbuilder在编译这些java文件的时候需要设置工程的jdk为1.5,并且编译语法也必须是1.5。
不过jbuilder好像有bug,有些无法生成class文件,于是只好在命令行下手工编译:
e:\javalibs\xmllibs\jaxb-ri-20050606\bin>javac -classpath "e:\jb\jaxbdemo\classes;e:\javalibs\javamail-1.3.2\mail.jar;e:
\javalibs\jaf-1.0.2\activation.jar;e:\javalibs\xmllibs\jaxb-ri-20050606\lib\jaxb1-impl.jar;e:\javalibs\xmllibs\jaxb-ri-2
0050606\lib\jaxb-api.jar;e:\javalibs\xmllibs\jaxb-ri-20050606\lib\jaxb-impl.jar;e:\javalibs\xmllibs\jaxb-ri-20050606\lib
\jaxb-xjc.jar;e:\javalibs\xmllibs\jaxb-ri-20050606\lib\jaxb-xjc.jar;e:\javalibs\xmllibs\jaxb-ri-20050606\lib\jsr173_1.0_
api.jar;d:\jdk1.5.0_02\jre\lib\ext\sunjce_provider.jar;d:\jdk1.5.0_02\jre\lib\ext\sunpkcs11.jar;d:\jdk1.5.0_02\jre\lib\e
xt\dnsns.jar;d:\jdk1.5.0_02\jre\lib\ext\localedata.jar;d:\jdk1.5.0_02\jre\lib\im\indicim.jar;d:\jdk1.5.0_02\jre\lib\im\t
haiim.jar;d:\jdk1.5.0_02\jre\lib\jce.jar;d:\jdk1.5.0_02\jre\lib\charsets.jar;d:\jdk1.5.0_02\jre\lib\deploy.jar;d:\jdk1.5
.0_02\jre\lib\javaws.jar;d:\jdk1.5.0_02\jre\lib\jsse.jar;d:\jdk1.5.0_02\jre\lib\plugin.jar;d:\jdk1.5.0_02\jre\lib\rt.jar
;d:\jdk1.5.0_02\lib\dt.jar;d:\jdk1.5.0_02\lib\htmlconverter.jar;d:\jdk1.5.0_02\lib\jconsole.jar;d:\jdk1.5.0_02\lib\tools
.jar;d:\jdk1.5.0_02\sample\jnlp\servlet\jardiff.jar;d:\jdk1.5.0_02\sample\jnlp\servlet\jnlp-servlet.jar;d:\jdk1.5.0_02\s
ample\jnlp\servlet\jnlp.jar;d:\jdk1.5.0_02\demo\jfc\codepointim\codepointim.jar;d:\jdk1.5.0_02\demo\jfc\java2d\java2demo
.jar;d:\jdk1.5.0_02\demo\plugin\jfc\codepointim\codepointim.jar;d:\jdk1.5.0_02\demo\plugin\jfc\java2d\java2demo.jar"  -d
 e:\jb\jaxbdemo\classes "e:\jb\jaxbdemo\src\com\lizongbo\jaxbdemo\onlineusers.java"
 
 
4.一个简单的测试代码:
 
package com.lizongbo.jaxbdemo;
 
import javax.xml.bind.jaxbcontext;
import javax.xml.bind.jaxbexception;
import javax.xml.bind.marshaller;
import java.util.list;
 
public class testjaxb {
  public testjaxb() {
    super();
  }
 
  public static void main(string[] args) {
    objectfactory objf = new objectfactory();
    onlineusers ous = objf.createonlineusers();
    onlineusers.onlineuser ou = objf.createonlineusersonlineuser();
    ou.setsessionid("lizongbo");
    ou.setusername("http://www.donews.net/lizongbo/");
    ous.getonlineuser().add(ou);
    //system.out.println(ous.getonlineuser().size());
    try {
      jaxbcontext jc = jaxbcontext.newinstance("com.lizongbo.jaxbdemo");
      marshaller m = jc.createmarshaller();
      m.setproperty(marshaller.jaxb_encoding, "utf-8");
      m.setproperty(marshaller.jaxb_formatted_output, boolean.true);
      //m.setproperty(marshaller.jaxb_schema_location, "c:/testnoschema.xsd");
      //m.setproperty(marshaller.jaxb_no_namespace_schema_location, "c:/test.xsd");
      //m.setproperty(marshaller.jaxb_fragment, boolean.true); 以xml片断形式输出
      m.marshal(ous, system.out);
    }
    catch (jaxbexception je) {
    }
  }
}

 
5.如果需要在输出的xml中包含<?xml-stylesheet type=’text/xsl’ href=’foobar.xsl’ ?>
采取的做法是:
system.out.println("<?xml version=’1.0′?>");//<?xml version="1.0" encoding="utf-8" standalone="yes"?>
        system.out.println("<?xml-stylesheet type=’text/xsl’ href=’foobar.xsl’ ?>");       
        marshaller m = context.createmarshaller();
        m.setproperty(marshaller.jaxb_fragment, boolean.true);//设置为片断输出的方式
        m.marshal(poe,system.out);

 6.由于jaxb2.0生成的java代码不再在代码中内置实现schem校验,因此需要单独的指定schema来进行校验。
 
jaxbcontext jc = jaxbcontext.newinstance("com.lizongbo.jaxbdemo");
      system.setproperty("jaxp.debug", "1");
      marshaller m = jc.createmarshaller();
      javax.xml.validation.schemafactory sf = javax.xml.validation.
          schemafactory.newinstance("http://www.w3.org/2001/xmlschema");
      schema schema = sf.newschema(new file("e:/jb/jaxbdemo/jaxbtest.xsd"));
      m.setschema(schema);
因此在限制元素出现的个数(例如minoccurs="0" maxoccurs="2")方面,没有jaxb1.0方便,
也没有castor那样方便(castor也是在生成的代码内置支持)。
 
尤其是想借助schema来生成让某些元素个数不同的java文件时,还是cator比较好。
 
 
参考资料:
https://jaxb.dev.java.net/jaxb20-ea/
使用 xmlbeans 进行编程
xmlbeans 如何引发数据绑定的巨大变革
 http://www-128.ibm.com/developerworks/cn/xml/x-beans1/index.html
java 中的 xml: 文档模型,第一部分:性能
研究 java 中 xml 文档模型的特性和性能

http://www-128.ibm.com/developerworks/cn/xml/x-injava/index.html
 数据绑定专题

http://www-128.ibm.com/developerworks/cn/xml/theme/x-pracdb.html
java 中的 xml: 数据绑定,第 1 部分:代码生成方法 — jaxb 及其它
根据 dtd 或模式生成数据类
http://www-128.ibm.com/developerworks/cn/xml/x-databdopt/part1/index.html
java 中的 xml: 数据绑定,第 2 部分:性能
经过了第 1 部分对数据绑定框架的介绍后,现在对其进行测试
http://www-128.ibm.com/developerworks/cn/xml/x-databdopt/part2/index.html
xml 与 java 技术: 用 castor 进行数据绑定
使用开放源代码项目 cator 进行 java 的 xml 数据绑定
http://www-128.ibm.com/developerworks/cn/xml/x-bindcastor/index.html
 
实用数据绑定: 涉入现实世界
数据绑定实用入门
http://www-128.ibm.com/developerworks/cn/xml/x-pracdb1.html
实用数据绑定: 考察 jaxb,第 1 部分
往返和 xml 到 java 的转换
http://www-128.ibm.com/developerworks/cn/xml/x-pracdb2.html
实用数据绑定: 深入考察 jaxb,第 2 部分
进一步考察 jaxb 的往返能力
http://www-128.ibm.com/developerworks/cn/xml/x-pracdb3.html
 
实用数据绑定: 使用 jaxme 转换 xml
编组和解组
http://www-128.ibm.com/developerworks/cn/xml/x-pracdb5.html
 
实用数据绑定: 谁在使用这个东西,结果如何?
在应用程序中有效地插入数据绑定框架
http://www-128.ibm.com/developerworks/cn/xml/x-pracdb6.html
 
 

2005年06月13日

jboss数据源的jndi名字为:"java:/MySqlDS"

<sql:setDataSource dataSource="java:/MySqlDS"  var="mydb" scope="application"/>

死活找不到数据源。

不得已,只好如下写:


<%@ page import="java.sql.*, javax.sql.DataSource, javax.naming.InitialContext" %>

<%
InitialContext JNDI_Context = new InitialContext();

//JNDI查找数据源

DataSource myds = (DataSource) JNDI_Context.lookup("java:/MySqlDS");
%>
<c:set var="mydb" value="<%=myds%>" scope="application"/>

一下子就ok了。

环境配置为: jstl1.1 (jakarta-taglibs-standard-1.1.2), jboss4.02.