2008年12月10日星期三

用jni实现java使用dll

使用jni调C++功能,也要之前用java声明出预调用的函数,然后用javah和生成的class文件生成一个.h文件,做的是针对这个.h文件,实现.cpp。

1:写一个Java类,在这个类中包含了需要调用的本地方法的描述。
public class Main {
static{
System.loadLibrary("TestDLL");
}

public native int get();

public static void main(String[] args) {
Main m = new Main();
System.out.println(m.get);
}
}

2:编译,然后命令行下使用命令javah -jni (-classpath . )Main,此时会在当前目录下产生一个Main.h文件
3:使用VC来编写本地方法的实现函数,最后编译成.dll文件。过程如下:
1) 选择new->projects(选择Win32 Dynamic-Link Library)->OK->An ampty DLL project->Finish。
2) 选择Tools->Options->Directories(添加目录..\J2SDK\INCLUDE和..\J2SDK\INCLUDE\WIN32)。
3) 将Main.h添加到工程。
4) 添加源文件Main.cpp,内容如下:
#include "Main.h"

JNIEXPORT jint JNICALL Java_Main_get(JNIEnv *, jobject)
{
return 1;
}

5) 编译生成TestDLL.dll文件。并将这个.dll文件拷贝到java工程的目录中。
4:运行java工程就可以了。

问题:dll中如果使用了dynamic_cast,就必须把工程的rtti打开,而且dll编译为debug版本,因为rtti要记录每个类的一些信息。否则不能使用这个dll。

注意: 整个过程要保证jdk的版本统一,如vc环境下和javah部分。

Tomcat 6.0快速配置

第一步:下载j2sdk和tomcat:到sun官方站点
最新的jdk为1.6.04,tomcat为6.0,建议jdk1.4以上,tomcat4.0以上

第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后设置按照路径进行安装即可。
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2):
JAVA_HOME=c:\j2sdk1.4.2
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%\bin

接着可以写一个简单的java程序来测试J2SDK是否已安装成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}

将上面的这段程序保存为文件名为Test.java的文件。
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat):
CATALINA_HOME:c:\tomcat
CATALINA_BASE:c:\tomcat
TOMCAT_HOME: C:\Tomcat
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下:
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet-api.jar;
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。

第三步:建立自己的jsp app目录
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;
2.在webapps目录下新建一个目录,起名叫myapp;
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
4.WEB-INF下新建一个文件web.xml,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>

5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:
<html>
<body>
<center>
Now time is: <%=new java.util.Date()%>
</center>
</body>
</html>

6.重启Tomcat
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。

第四步:建立自己的Servlet:
写入你的第一个Servlet:
在你新建的Application myapp/WEB-INF/classes/test目录下新建HelloWorld.java
package test;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)th
rows ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");

}
}

然后照样用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servl
et.*
那么就是应该把C:\Tomcat\common\lib里面的servlet-api.jar文件拷贝到C:\JDK\jre\lib\ext中,再次编译,就没有问题了!
然后在Tomcat目录里面的C:\Tomcat\webapps\myapp里面按如下的文件结构:
myapp\index.jsp
myapp\WEB-INF\classes\test\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个
里面)
然后在浏览器中输入http://localhost:8080/myapp/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found
怎么回事呢?
Servlet必须使用C:\Tomcat\webapps\myapp\WEB-INF这个目录下面的web.xml文件进行注册,
用EditPlus打开这个web.xml文件,
在<web-app></web-app>添加下面这段程序:
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

为什么呢?
因为 这样的结构
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>test.HelloWorld</servlet-class>//类的路径
</servlet>
表示指定包含的servlet类.
而以下的结构
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
表示指定HelloServlet应当映射到哪一种URL模式。

在修改web.xml完毕过后,重新启动Server,然后再输入http://localhost:8080/myapp/HelloWorld,,那么偌大一个Hello,World!等
着你呢,恭喜你!

第五步:建立自己java Bean

1. 在你新建的Application myapp/WEB-INF/classes/test目录下新建TestBean.java
package test;
public class TestBean
{
private String name =null;
public TestBean(String nameInit){
this.name = nameInit;
}
public void setName(String newName){
this.name=newName;
}
public String getName(){
return this.name;
}
}

然后照样用javac TestBean.java来编译这个文件。

2.然后在你新建的应用程序目录myapp下新建一个新的jsp文件:testBean.jsp
<%@ page import="test.TestBean" %>
<html>
<head>
<title>Test Bean</title>
</head>
<body>
<center>
<%
TestBean testBean = new TestBean("Http://yexin218.cublog.cn");
%>
Java Bean Test:
The author's blog address is<%=testBean.getName()%>
</center>
</body>
</html>

好了,确定各个文件的位置:
myapp\index.jsp
myapp\testBean.jsp
myapp\WEB-INF\web.xml
myapp\WEB-INF\classes\test\HelloWorld.class
myapp\WEB-INF\classes\test\TestBean.class

3.重启Tomcat如果需要的话,在浏览器输入:http://localhost:8080/myapp/testBean.jsp 幸运的话就会看到:

Java Bean Test: The author's blog address isHttp://yexin218.cublog.cn

这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。

第六步:配置虚拟目录

打开 Tomcat6.0\conf\server.xml 文件,在 <Host> 和 </Host> 之间加入
<Context path="/myapp" docBase="D:\myapp" debug="0" reloadable="true" crossContext="true" />

2008年11月26日星期三

在JSP中访问数据库示例

将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建 create table test(test1 varchar(20),test2 varchar(20),然后向这个表写入一条测试纪录,那么现在开始我们的jsp和数据库之旅吧。

  一、jsp连接Oracle8/8i/9i数据库(用thin模式)

testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

  二、jsp连接Sql Server7.0/2000数据库


testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

  三、jsp连接DB2数据库


testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

  四、jsp连接Informix数据库


testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

  五、jsp连接Access数据库


<%@page import="java.sql.*"
import ="java.util.*"
import ="java.io.*"
import="java.text.*"
contentType="text/html; charset=gb2312"
buffer="20kb"
%><%! int all,i,m_count;
String odbcQuery;
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String username,title,content,work,email,url,time,date;
String datetime;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch (ClassNotFoundException e)
{ out.print ("驱动程序不存在");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:db1");
odbcstmt = odbcconn.createStatement();
odbcQuery="Select * From book where datetime>2001-4-26 Order By datetime DESC";
odbcrs=odbcstmt.executeQuery(odbcQuery);
int i=0;
while (i<130) odbcrs.next();
while (odbcrs.next())
{
//*/////////////////////////显示数据库的内容用于调试程序是用//
int ii;
try{
try{
for (ii=1;;ii++)
out.print ("<br>Cloumn "+ii+" is: "+odbcrs.getString(ii));
}catch (NullPointerException e) {
out.print ("有空的指针");
}
}catch (SQLException e){
}
}
odbcrs.close();
odbcstmt.close();
odbcconn.close();
}catch (SQLException e)
{ out.print (e);
}
%>

2008年11月18日星期二

Senior technical lead

Job ID: SWG-0186873
Job type: Full-time Regular
Work country: China
Posted: 10-Sep-2008
Work city: Shanghai
Job area: Software Development
Travel: up to 10%; travelling 1 day a week
Job category: Software Development & Support
Business unit: WPLC
Job role: Technical Support Professional
Job role skillset: General
Job description BU Description:IBM Workplace Portal and Collaboration (WPLC - Lotus)

BU is responsible for developing IBM's collaborative technology and solutions which integrate people, data and business processes to create the "human side" of IBM's On Demand and SOA strategies. We are inviting talents to share our enjoyment of developing Lotus Mashups, one of components of IBM Mashup Center. IBM Mashup Center, as the first integrated enterprise Web 2.0 mashup software platform in the industry, is a complete end-to-end mashup platform, supporting line-of-business assembly of simple, flexible, and dynamic Web applications, with the management, security, and governance capabilities that IT requires. Within this project, developers/testers will have opportunity to develop deep skills and knowledge in J2EE, Web2.0, and will work closely with worldwide senior technical people.

Developer lead:
• Lead the communication and collaboration with worldwide labs, and facilitate conference call with US teams.
• Analyze requirements, design and implementation of new features.
• Develop full owned code for product new release
• Work across organization boundaries to achieve objectives.
• Work as a technical leader to either lead a team to complete the software development project tasks..
• Passionate to software development. An independent, assertive, self-motivated, creative, dynamic, and flexible approach is required, whilst offering and open to new ideas.

Tech Skills:
• Rich programming skills in Java, J2EE, and AJAX
http://en.wikipedia.org/wiki/Ajax_(programming)
http://en.wikipedia.org/wiki/J2ee
• Familiar with software development and software development process
• Solid Knowledge or rich experiences in following fields is a strong plus:
• Web Application Development -- HTML/CSS/JavaScript/JSP
• Hands-on experience on AJAX framework/toolkits such as Dojo, jQuery, YUI, prototype, etc.
http://en.wikipedia.org/wiki/List_of_Ajax_frameworks
• OGSI, eclipse equinox

• WebSphere Application Server public Java API and programming extensions
• iBatis/Hibernate. IBM DB2, Oracle, Microsoft SQL Server
http://ibatis.apache.org/
http://en.wikipedia.org/wiki/Hibernate_(Java)

Soft Skills
• Strong English communication in writing, listening and speaking
• Strong technique leadership and assertive thinking
• Strong communication and team work skills
• Self-motivated
• Strong analytical and troubleshooting skills
• Quick learner and good flexibility
• Having strong sense of ownership and high accountabilityMaster degree or above in Computer Science & Technology or equivalent,

Required
Master's Degree
English: Fluent
Chinese simplified: Fluent

IBM is committed to creating a diverse environment and is proud to be an equal opportunity employer. All qualified applicants will receive consideration for employment without regard to race, color, religion, gender, gender identity or expression, sexual orientation, national origin, genetics, disability, age, or veteran status.

2008年11月14日星期五

视频终端的参数设置

1、基本参数
视频设备,尺寸,帧率,画质
麦克风设备,音量
扬声器设备,音量
带宽

2、H.323
GK地址,用户名,密码,E164

3、SIP
sip server,sip名

4、VMEET
server,ID,password

2008年11月11日星期二

使用OpenSSL制作PKI数字证书

十年前就使用过OpenSSL了,这个加密工具和算法包非常强大和丰富。不过至今仍不能清楚记得命令行的具体参数,需要用的时候总免不了要翻翻手册,这里做一个简单的笔记。

1.首先要生成服务器端的私钥(key文件):
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
去除key文件口令的命令:
openssl rsa -in server.key -out server.key

2.openssl req -new -key server.key -out server.csr -config openssl.cnf
生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

3.对客户端也作同样的命令生成key及csr文件:
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:
Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

现在我们所需的全部文件便生成了.

另:
client使用的文件有:ca.crt,client.crt,client.key
server使用的文件有:ca.crt,server.crt,server.key

.crt文件和.key可以合到一个文件里面,把2个文件合成了一个.pem文件,直接拷贝过去即可。

IBM技术以及职位相关信息

软件下载资源中心
http://www.ibm.com/developerworks/cn/downloads/index.html

Eclipse开发环境开源项目
http://www.eclipse.org/

IBM职位招聘信息
https://jobs3.netmedia1.com/cp/search.jsp?tc=1199340560188

IBM IT架构师职位要求 链接