2010年8月22日星期日
JAVA开发二三事(续一)
2010年8月15日星期日
JAVA开发二三事
String url = "jdbc:sybase:Tds:" + machine + ":" + port + "/" + dbname + "?charset=cp936";
properties = new Properties();
properties.put("user", userID);
properties.put("password", password);
Class.forName("com.sybase.jdbc3.jdbc.SybDriver").newInstance();
connection1 = DriverManager.getConnection(url, properties);
2010年4月25日星期日
Java 读写 Word doc 文件的方法(POI代码示例)
import java.io.*;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
public class Main {
public static void main(String[] args) {
try {
//新建 HWPFDocument 对象,读入doc文件
HWPFDocument doc = new HWPFDocument(new FileInputStream("c:\\test.doc"));
//得到整个doc文档的Range,可以理解为文档对象
Range r = doc.getRange();
System.out.println("Example you supplied:");
System.out.println("---------------------");
String text = new String("");
//得到整个文档里面的所有纯文字,包含回车换行。一段是一行
text = r.text();
//System.out.println(text);
//得到整个文档的分节数。一般只有一节,排版很漂亮的word文档一般分为多节
System.out.println("numSections: " + r.numSections());
//得到倒数第一节的Section对象
Section section = r.getSection(r.numSections() - 1);
//得到该节里面的段落数
System.out.println(section.numParagraphs());
System.out.println("numParagraphs: " + section.numParagraphs());
String searchText = "${Ryan}";
String replacementText = "Apache Software Foundation";
//循环得到每一段落的文字。这个跟Range.text()是不同的。
for (int np = 0; np < section.numParagraphs(); np++) {
Paragraph para = section.getParagraph(np);
//得到该段落的文字
text = para.text();
//System.out.println(Integer.toString(np) + ":" + text);
int offset = text.indexOf(searchText);
if (offset >= 0) {
System.out.println(Integer.toString(np) + ":" + para.text());
//如果找到了,就进行文字的替换。replaceText只能针对段落
para.replaceText(searchText, replacementText);
break;
}
}
//写入到新的doc文件
OutputStream outdoc = new FileOutputStream("c:\\test2.doc");
doc.write(outdoc);
outdoc.flush();
outdoc.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
}
2010年2月22日星期一
GAE(Google App Engine) 对 struts Spring 等的支持情况
- Spring + JDO in Google App Engine
- 17 Minute JDO!
- Spring + JPA in Google App Engine
- More on Spring Security in Google App Engine
- Spring Security in Google App Engine
- Google App Engine Testing with Spring
- Queries in GAE: One to Many Relationships
- Google App Engine
- Queries in GAE: Many to Many Relationships
- Queries in GAE: One to One Relationships
Spring + JPA in Google App Engine
One difficulty I encountered was getting Spring (2.5.6) to work nicely with the App Engine-provided JPA. But now I have it working. Here's how.
The basic problem is that PersistenceAnnotationBeanPostProcessor has a dependency on javax.naming. But that's the thing you need to get @PersistenceContext to work. And you want that to work because you want to be able to have transactions that span DAOs (or, at least, I wanted that).
That dependency is easy to resolve, however. Just grab the source to PersistenceAnnotationBeanPostProcessor, put it in your own package, and replace the catch blocks with NamingException with just Exception … you won't be using those things anyway.
Now, use that bean in your context configuration file.
<bean id="persistienceAnnotationBeanPostProcessor"
class="your.package.name.PersistenceAnnotationBeanPostProcessor" />
Finally, use the @PersistenceContext annotation in your DAO just like it says in the Spring documentation:
@PersistenceContext
private EntityManager entityManager;
You're done. Thank me.
Update 5/25: As Alex points out I spelled the bean ID incorrectly. However, that was right from my code, so the id doesn't really matter. In fact, now I have:
<bean class="your.package.name.PersistenceAnnotationBeanPostProcessor" />
2009年5月7日星期四
Grails 连接 Oralce url 的方法
折腾了半天,终于连上了oracle数据库。下面是url的例子:
dataSource {
pooled = true
url = "jdbc:oracle:thin:@localhost:1521:orcl"
driverClassName = "oracle.jdbc.OracleDriver"
username = "ncstudy"
password = "ncstudy"
}
其中:thin是jdbc驱动的一种类型。orcl是实例名。
我试了sqlite数据库:
url = "jdbc:sqlite:gtunes"
//url = "jdbc:sqlite::memory"
driverClassName = "org.sqlite.JDBC"
怎么都是不成哦。
奇怪的是,NC的oralce驱动类名是oracle.jdbc.driver.OracleDriver,我试了,两个都可以。
收工,回家。
由于GAE不支持hibernate,没办法,那就很多scalforld的功能没法利用了。只能用JPA。JDBC也用不了,得换成JDO。GORM也悬了。哎呀。Grails。
郎啊郎别太忙 | langalang.blogspot.com
2009年4月8日星期三
Google App Engine SDK for Java 版提前发布测试 - wow !!!
Google云计算平台Java支持提前发布了。原来说要等到5月份。这下得好好玩玩了。
文档地址:http://code.google.com/intl/zh-CN/appengine/docs/java/gettingstarted/
SDK for java 早期版:http://googleappengine.googlecode.com/files/appengine-java-sdk-1.2.0.zip
注意:Google App Engine SDK for Java,在中文的GAE网站上还没有下载的。
如果自动重定向到中文网页,请在页面顶端选择english。
或者访问:http://code.google.com/intl/en/appengine/downloads.html#Google_App_Engine_SDK_for_Java
郎啊郎别太忙 | langalang.blogspot.com
2009年4月2日星期四
Google App Engine将支持Fortran语言?
Today we're excited to officially announce support for FORTRAN 77!
2009年3月31日星期二
Google App Engine 云计算平台5月份将支持Java语言
Java: Coming Soon to Google’s App Engine
SUN玩了。
2008年12月1日星期一
AIX UNIX 平台安装 NC oracle 和 WAS 经验数则
硬件方面,四台IBM Sytem P5 小型机,两台SNA盘阵,一个带库。分成两组,每组一台数据一台应用,一组在线,另一组灾备,HACMP群集。折腾oracle、nc、WAS遇到几个问题。问题虽然都解决了,对于不熟悉的人来说还是很费劲的。
随便写几点,想到哪里,写到哪里。
- NC连接不上oracle,用任何客户端都连不上,监听ping得通,但是就是不正常。原因是由于oracle装在盘阵上,而ha还没有配置好,监听配置指定IP的话,解析不到,只能写hostname。这个折腾了一下午,鄙视一下Oracle的经销商。
- AIX自带了一个java1.5,位于/usr/java5,直接export JAVA_HOME=/usr/java5就可以。公司流传的那个版本是linux平台的,在aix ppc 64平台上没法用。
- AIX环境的LANG设置:export LANG=Zh_CN。和linux平台不一样,注意大小写。这个不写对,nc是乱码,日志"报无法解析语言配置文件"错误。
- System P5的机器,WAS要使用AIX PPC 64的版本,如果跑NC502,要使用.11的补丁,.07的不行,补丁和tools也要相应的版本。在这里强烈谴责一下集团办事的人,3张WAS盘,补丁和tools盘都发错了,去ftp上下载,要下一天。怎么在办事啊?浪费时间。
- AIX 平台 umount 光驱的问题,大活人被那个什么憋死,怎么都umount不了cdrom,总是说资源忙。上网查,有大把的同病相怜的兄弟姐妹。光驱不umount的话,光盘弹不出来,换不了盘,WAS可是有三张盘的哦。被折腾的火大,大叫一声FUCK user,谁在使用光驱啊,使用这个命令,他可以显示出谁在使用光驱:fuse -uck /cdrom,看到是root在用,root不就是自己吗?FUCK到自己头上了。高。但是就是kill不掉这个root进程,没办法,惹不起,我还躲不起,关掉所有的连上去的远程端,再重新进,fuse -uck /cdrom,这次ok 了,umount /cdrom,跑到机房换光盘去。这个问题折腾了老半天。晕死。
- 装WAS的时候,直接进cdrom的WAS目录,运行setup.sh安装。刚开始的时候,想和win下面一样,运行launch.sh,结果说必须在浏览器里运行,机器上又没有mozilla,搞死个人。
- 宁可麻烦一点,mount光驱,拷贝WAS安装文件到硬盘再装,要不然10倍数的cdrom,装的慢死。装第二台时,速度刷刷的。
- smitty是个好东西。
- smitty jfs2,可以进去调整挂载的硬盘分区的大小。这台机器由于要做磁带备份,默认只备份根分区,根分区搞的很小,只有3G、太小了。
- 待续。。。
--
郎啊郎别太忙 | langalang.blogspot.com
2008年11月19日星期三
JRuby 1.1.5 发布
Homepage: http://www.jruby.org/
Download: http://dist.codehaus.org/jruby/
JRuby 1.1.5 是从 JRuby 1.1以来的第5个发行版。主要改进了兼容性和效率问题。我们的目标是更快的更新周期(3-4周)。我们希望在一个更快的更新周期里面解决JRuby用户提出的问题。
主要更新: - 每个类方法缓存 (改进 _send_, respond_to?, and defined?)
- 常量缓存显著的改进了常量的搜索
- 减少了内存占用
- 几个 Java 集成的修复
- 更新到Rubygems 1.3.1 和 Rspec 1.1.11
- 更新了 ffi (Foreign Function Interface) 支持t
- 更多 1.9 mode支持
- 修复了从 1.1.4以来的113 bug
郎啊郎别太忙 | langalang.blogspot.com
2008年11月12日星期三
NC 可以飞快的在 Firefox 里面运行
晚上做一个报表,5千行记录,IE刷新一下很慢,并且是越来越慢。忍不住到Firefox中试了试,果真可以。
以前试过的,总是不行,打不开用友NC,今天在第一次载入的时候,多等了一下,就进去了。
Firefox是3.0.3。这样在Linux下面也可用了。实在没有理由再在windows下面办公了。
组长老吴一次在火车上看了我秀了ubutun的3D动态桌面,播放视频,编辑word文档,大发感慨,号召大家都转到linux下面去。要得哦。
不过,我建议办公使用,还是用 Fedora10 这个版本比较好,因为所有的软件都在一张DVD光盘里面了。ubuntu虽然说很方便,但是毕竟让每个人都去熟悉apt-get install命令,还是有部分人不感冒的。
老规矩,email post blog,附件发图片到博客。一气呵成。
--
郎啊郎别太忙 | langalang.blogspot.com
2008年10月20日星期一
NC脚本的JAVA_HOME设置
export LANG=zh_CN.gbk
export JAVA_HOME=/home/jdk1.5.0_06
--
郎啊郎别太忙 | langalang.blogspot.com
2008年10月11日星期六
最近在玩的东西
blogger最大的好处是可以用邮件自动发布文章。不用我登录,随便写一份邮件过去,就可以发布出来。
我的微软的博客也接受邮件发博,正好,可以写同时给这两个地址发邮件,一篇博就方便的发在两个地方。国内的还没有哪一家支持这个服务吧?百度的是不行的。donews的wordpress的也不支持,那一些使用dot net的TEXT系统的比如csdn、博客园等,统统不行。新浪、sohu支不支持,那就更悬了,这一些网站就是要赚流量放广告的,他生怕你不来他的页面访问,远程发博,想都不用想。
目前有一个最大的问题,blogger的抄送功能不能用,就是BlogSend功能,BlogSend地址是另外一个电子邮件地址,只要一发布文章,系统会将其邮寄文章到此地址。但是就是不能寄送到msn livespace。
这里有两篇重要的参考文章,估计网上的搜官都看过:
看了就明白如何邮件发博。
另外,在goolge上搜索"邮件发布博客",可以证明,国内提供这个邮件发博功能的真是不多啊。
当仁不让,本文同时通过Gmail发送到另外一个蜗居:http://anuxs.spaces.live.com/
--
郎啊郎别太忙 | langalang.blogspot.com