显示标签为“Java”的博文。显示所有博文
显示标签为“Java”的博文。显示所有博文

2010-12-09

不能加载SAPJCORFC

操作系统为Windows 7 64bit Enterprise,JDK版本为32bit的"1.5.0_22"。按照sapjco2的说明已经把sapjcorfc.dll和librfc32.dll复制到目录c:\system\windows\system32,可是仍然得到错误:
Exception in thread "main" java.lang.ExceptionInInitializerError: JCO.classInitialize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [no sapjcorfc in java.library.path]. java.library.path [C:\Program Files (x86)\Java\jdk1.5.0_22\bin;.;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Java\jdk1.5.0_22\bin; C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\ThinkPad\Bluetooth Software\;C:\Program Files\ThinkPad\Bluetooth Software\syswow64;C:\Program Files (x86)\Windows Live\Shared;c:\cygwin\bin;C:\Users\dingjun.jia\Documents\Data\UnxUtils\usr\local\wbin;C:\Users\dingjun.jia\Documents\Data\projects\o2 SAP\cmd;]
    at com.sap.mw.jco.JCO.<clinit>(JCO.java:820)
    at JM_I025B.countVendorData(JM_I025B.java:26)
    at JM_I025B.main(JM_I025B.java:10)
很明显是找不到sapjcorfc.dll,所以不能加载。把sapjcorfc.dll和librfc32.dll这两个文件复制到jdk的bin目录下,也就是上面错误中的第一个目录中,就能正确加载了。难道java只在目录列表中的第一个目录去寻找。

2007-04-20

保存Tomcat的访问日志记录

Tomcat的访问日志默认时关闭的,要打开访问日志记录只需修改conf/server.xml文件,去掉下面一段的注释:

<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>

2007-04-12

注释JMS block

把cocoon作为一个webapp分发在Tomcat下,如果在启动Tomcat时出现警告提示:


WARN! *** JMS block is installed but jms client library not found. ***
- For the jms block to work you must install and start a JMS server and place the client jar in WEB-INF/lib.
- The default server, OpenJMS is configured in cocoon.xconf but is not bundled with Cocoon.

解决办法:
在xcoocon.conf文件里注释掉关于jms-connection-manager的配置内容即可:
<jms-connection-manager logger="core.jms">
...
</jms-connection-manager>

在Tomcat 5.5下使用APR

在windwos下启动Tomcat 5.5下时,命令行窗口会提示:

INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\jdk1.5\bin;.;C:\WINDOWS\system32; ...

为了提高Tomcat的性能,应让Tomcat使用APR,Apache Portble Runtime。具体信息参见http://tomcat.apache.org/tomcat-5.5-doc/apr.html。

在windows安装方法:下载编译好的dll文件,tcnative-1.dll,把它复制到%SystemRoot%\system32目录下即可。 

2007-02-22

Tomcat目录结构

Tomcat下的目录结构

/bin 启动和关闭Tomcat server的脚本

/conf 包含server.xml(Tomcat的配置文件),web.xml(应用程序的配置文件)和tomcat-users.xml(用户管理配置文件)

/log 日志文件

/work JSP生成的Servlet

/webapps 应用程序发布位置

/shared/lib 包含应用程序访问的JAR文件

/lib 包含Tomcat使用的JAR文件

/server/webapps 包含Tomcat自带的系统管理和应用管理的web工具

/common 包含Tomcat和应用程序都可以访问的JAR文件

2006-06-18

cocoon输出文件的编码设置

发现Cocoon输出html文件的默认编码设置为ISO-8859-1,这是在cocoon的配置文件cocoon/WEB-INF/web.xml中默认定义的。


<!--
Set encoding used by the container. If not set the ISO-8859-1 encoding
will be assumed.
Since the servlet specification requires that the ISO-8859-1 encoding
is used (by default), you should never change this value unless
you have a buggy servlet container.
-->
<init-param>
<param-name>container-encoding</param-name>
<param-value>ISO-8859-1</param-value>
</init-param>

要修改生成的HTML文件的默认编码,可以在Cocoon的sitemap文件里修改HTML的Serializer,修改后如下面例子所示:

<map:serializers default="html">
<map:serializer logger="sitemap.serializer.links" name="links" src="org.apache.cocoon.serialization.LinkSerializer"/>
<map:serializer logger="sitemap.serializer.xml" mime-type="text/xml" name="xml" src="org.apache.cocoon.serialization.XMLSerializer"/>
<map:serializer logger="sitemap.serializer.html" mime-type="text/html" name="html" pool-max="${html-serializer.pool-max}" src="org.apache.cocoon.serialization.HTMLSerializer">
<doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
<doctype-system>http://www.w3.org/TR/html4/loose.dtd</doctype-system>
<encoding>UTF-8</encoding><!-- this encoding is added by Dingjun Jia -->
</map:serializer>

2006-06-17

cocoon连接MySQL数据库

今天下午花了不少时间才设置好cocoon与MySQL数据库的连接。要设置cocoon和MySQL可大致分为3步:



  1. 让cocoon能找到JDBC的 jar文件

  2. 让cocoon预先加载JDBC driver

  3. 设定连接池


我没有用cocoon自带的java web server,而是用的Tomcat 5.5.17。下载MySQL Connector/J 3.1.12后把mysql-connector-java-3.1.12-bin.jar文件先后复制到了多个目录:



  • $JAVA_HOME/jre/lib/ext

  • $CATALINA_HOME/common/lib

  • $CATALINA_HOME/webapps/cocoon/WEB-INF/lib


重新启动tomcat后日志仍然报告:
cocoon java.sql.SQLException: No suitable driver
意思是cocoon仍然找不到MySQL的MySQL Connector/J 3.1.12。
后来在$CATALINA_HOME/webapps/cocoon/WEB-INF/web.xml文件里第195行添上
com.mysql.jdbc.Driver
就能与MySQL进行连接了。


下面是设定一个连接池的例子:
在cocoon.xconf文件里加上:



<!-- added by Dingjun Jia, mysql connection pool in cocoon.conf -->
<jdbc name="abc" logger="core.datasources.abc">
<pool-controller min="5" max="10"/>
<!-- <auto-commit>false</auto-commit> -->
<!-- 此行若不注释掉,总会得到错误:
Not allowed to define mixed content in the element match at file:/opt/tomcat/webapps/cocoon/abc/sitemap.xmap:80:36 -->
<dburl>jdbc:mysql://localhost/abc</dburl>
<user>jia</user>
<password>password</password>
</jdbc>



P.S:

If we want to use non-latin characters in mySQL, Greek for example, we need to have a more specific connection string: jdbc:mysql://YourHostName:3360/YourDataBaseName?useUnicode=true&amp;characterEncoding=YourEncoding for example: (cocoon.xconf)


  <jdbc name="pool_name">
<pool-controller min="5" max="10"/>
<dburl>jdbc:mysql://YourHostName:3360/YourDataBaseName?useUnicode=true&amp;characterEncoding=ISO-8859-7</dburl>
<user>database_user</user>
<password>database_password</password>

</jdbc>

2006-06-16

Cocoon的sitemap引擎

Cocoon有两种不同的sitemap引擎,一种是编译(compiled)过的,另外一种是解释型(interpreted)的。两个都在Cocoon的配置文件$CATALINA_HOME/webapps/cocoon/cocoon.xconf里被定义,其中编译过的版本是cocoon默认的sitemap engine(check-reload和reload-method的值都为yes)。Cocoon监视sitemaps,当发现sitemaps发生变化时,Cocoon会重新加载配置文件。当Cocoon重新载入sitemap时,可以以同步或异步两种不同的方式来工作。

2005-08-03

JDBC 与 SQLJ

JDBC(Java Database Connectivity)和SQLJ都可用于Java编程时与数据库打交道。JDBC具有较好的灵活性,能都处理动态生成的SQL语句,但是缺少类型检查,当SQL表达式有错误时,在执行时才能被发现和捕捉到。而SQLJ虽然灵活性较差,但在编译阶段就会检查SQL表达式的语法是否有错。SQLJ会在编译时就优化SQL查询,而JDBC中只有使用PreparedStatements语句才能达到。

以下是一个SQLJ的一个例子:

2004-07-14

Java 程序中的多线程

Java程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持。本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观。读完本文以后,用户应该能够编写简单的多线程程序。

一个完整的Socket例子

服务端的程序: 

import java.io.*;
import java.net.*;

public class SocketServer {
    ServerSocket ss=null;
    Socket s=null;
    DataInputStream inStream=null;
    DataOutputStream outStream=null;

Java Socket编程

      Sockets有两种主要的操作方式:面向连接的和无连接的。面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺序时一样。无连接的sockets操作就像是一个邮件投递,没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样。