Ubuntu Gutsy安装MapXtreme

首先从官方网站下载MapInfo® MapXtreme® Java Edition(需要注册用户)
目前最新版是4.8.0,推荐使用最新版,之前安装4.7会提示NoClassDefineFound

下载完了如果直接安装会报一大堆librt.so.1之类的找不到的错误,实际上在/lib目录下都有,
具体解决办法参考这篇文章,是因为2.6的内核启用了LinuxThread线程库的原因

下面以下载完的安装文件install.bin为例,

/* 把原本安装文件中的LD_ASSUME_KERNEL操作注释掉,并写入新文件 */
cat ./install.bin | sed "s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" > ./installnew.bin

接下来就可以通过运行生成的installnew.bin来安装MapXtreme了,

sudo sh ./installnew.bin

一切顺利就会启动图形安装界面,按照提示安装即可,如果不顺利我也不知道了
需要注意的是安装程序默认使用安装文件自带的jre,中文显示有问题,最好在安装过程中设置使用其他的jre(安装完成后也可以修改启动脚本中的JRE_HOME环境变量进行修改)

标签:, , , ,

相关日志

了解UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID (Globals Unique Identifiers)。

UUID 在所有计算机上都是唯一的。不过,它们的值是完全随机的,因此不能用来确定添加值的时间或值的顺序。另外,UUID 值比其它方法(包括全局自动增量)所需的值大得多,并且在主键表和外键表中都需要更多的表空间。使用 UUID 建立表索引的效率也更低。

标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

JDK中的UUID实现

从JDK 5.0开始自带了UUID的实现 java.util.UUID,示例用法如下:

  1. import java.util.UUID;
  2.  
  3. public class TestUUID {
  4.  
  5.     /**
  6.      * @param args
  7.      */
  8.     public static void main(String[] args) {
  9.         // TODO Auto-generated method stub
  10.         for (int i = 0; i < 10; i ++) {
  11.             System.out.println(UUID.randomUUID().toString());
  12.         }
  13.     }
  14.  
  15. }

输出如下结果:

2bc58ecd-dd48-4144-b5aa-2ebebaad300c
468a36ed-2eec-42fc-9524-d04a404a5d94
e43ea34d-3768-4ad0-8f28-dd8e61267103
dba317d5-688e-4656-bea5-4542b414481d
f40408bb-df92-4118-8265-1e83f2810ae2
386e7c9d-b2af-4787-a171-6b1d9f350193
77a2eb19-0541-4fc3-a014-1b70840c42ec
4a00304e-d7e7-4a6f-bef3-4fb40ed7e1c2
631fdb01-1505-44e9-9e1b-3d84083651da
bdb68883-ff9b-4b56-a825-940f45b3b3db

Hibernate中的使用

UUID algorithm
The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a
counter value (unique within the JVM). It’s not possible to obtain a MAC address or memory address from Java
code, so this is the best we can do without using JNI.

从hibernate reference中抄了个例子如下:

  1. <class name="eg.Person" table="person">
  2.     <id name="Key" column="pid" type="string">
  3.         <generator class="uuid" />
  4.     </id>
  5.     <property name="birthday" type="date" />
  6.     <component name="Name" class="eg.Name"><!-- class attribute optional -->
  7.         <property name="initial" />
  8.         <property name="first" />
  9.         <property name="last" />
  10.     </component>
  11. </class>
标签:, ,

相关日志

Java获取随机字符串

  1. import java.util.Random;
  2.  
  3. public static String getRandomString(int length) {
  4.     StringBuffer buffer = new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  5.     StringBuffer sb = new StringBuffer();
  6.     Random r = new Random();
  7.     int range = buffer.length();
  8.     for (int i = 0; i < length; i ++) {
  9.         sb.append(buffer.charAt(r.nextInt(range)));
  10.     }
  11.     return sb.toString();
  12. }

这个没啥意思,就是随机数用的不多,每次要用都记不住,在这里备个份@@

标签:, ,

相关日志

PreparedStatement的怪异问题

详细代码和数据库(Oracle)见附件,本来很简单的事情没想到让我碰到了诡异的问题。

PreparedStatement pstmt = conn.prepareStatement("update followcase set customitems=? where id=?");
pstmt.setString(1, customItems);
pstmt.setString(2, "4788");

这么写必然报java.sql.SQLException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值。
如果把第二个参数值直接写入sql里就没问题,可以肯定的是原因必然是因为customItems超过一定长度,据smth上大大说当长度超过4000/3的时候可能会出问题。
现在为了解决无法插入的问题,只能先把除了customitems字段的insert进去,然后再来update它,晕。

PreparedStatement有什么特殊限制吗?

下载:测试代码及数据库

标签:, , ,

相关日志

linux下的Resin自启动问题

我们使用的是resin-2.1.17

首先按照bin/httpd.sh里的说明将resin配置为服务

  1. # To install, you'll need to configure JAVA_HOME and RESIN_HOME and
  2. # copy httpd.sh to /etc/rc.d/init.d as resin.  Then
  3. # use "unix# /sbin/chkconfig resin on"
  4. cp httpd.sh /etc/rc.d/init.d/resin
  5. /sbin/chkconfig resin on

配置JAVA_HOME 和 RESIN_HOME

  1. JAVA_HOME=/opt/j2sdk1.4.2_10
  2. export JAVA_HOME
  3.  
  4. RESIN_HOME=/opt/resin-2.1.17
  5. export RESIN_HOME

自动启动的时候必须把变量export进来

修改

  1. bin=`dirname $script`

  1. bin=$RESIN_HOME/bin

理论上这样应该已经能作为服务启动了
事实上也确实启动了
但是发现所有使用了类似

  1. <fmt:formatDate value='${rptDate}' type='date'/>

的jstl表达式的地方日期格式都是英文的,而不是期望中的yyyy-MM-dd的格式

一开始以为是系统重新启动默认使用的自带的jdk的问题
于是将系统默认jdk设置成/opt/j2sdk1.4.2_10
结果问题还是一样
这时候可能是某个同事操作cms系统的时候重建了页面
首页的中文全变成了??
这样就很明显是jdk的编码问题了
google之

在最末行启动参数加上强制指定编码,即修改为

  1. exec $perl $bin/wrapper.pl -chdir -name "$name" -class "$class" -Dclient.encoding.override=GBK -Dfile.encodin
  2. g=GBK -Duser.language=zh -Duser.region=CN -Djava.awt.headless=true $args $*

其中“ -Djava.awt.headless=true”是为了在linux下jfreechart的图像能正常显示
问题解决

以上所做的修改都是针对httpd.sh
别忘了改完重新copy一份到/etc/rc.d/init.d

造成这个问题的原因可能是因为服务加载的顺序问题
因为jdk的默认编码设置是跟系统设置一样的

这件事情教育我们要使用

  1. <fmt:formatDate value='${rptDate}' pattern='yyyy-MM-dd'/>

补充:
一些地方还是出现乱码
发现数据中心的linux没有设置LC_ALL
修改/etc/sysconfig/i18n

  1. LANG="zh_CN.GB18030"
  2. LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
  3. LC_ALL="zh_CN.GB18030"
  4. SUPPORTED="en_US.UTF-8:en_US:en:zh_CN.GB18030:zh_CN:zh:zh_TW.big5:zh_TW:zh:ja_JP.UTF-8:ja_JP:ja:ko_KR.eucKR:ko_KR:ko"
  5. SYSFONT="lat0-sun16"
  6. SYSFONTACM="8859-15"
  7. export LC_ALL

当然编码具体情况具体分析

标签:, , ,

相关日志
Page 1 of 212»

京ICP备05059555号