2012年12月20日星期四

Hibernate中findById时出现org.hibernate.MappingException: Unknown entity:的解决办法

 

原因:在使用myeclispe生成pojo和DAO代码后,对相关类进行了重构,改变了包。造成反射时找不到类。

出现错误的findById代码

public Trace findById(Long id) {
        log.debug("getting Trace instance with id: " + id);
        try {
            Trace instance = (Trace) getHibernateTemplate().get("Trace", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }

 

修改后的方法

public Trace findById(Long id) {
        log.debug("getting Trace instance with id: " + id);
        try {
            Trace instance = (Trace) getHibernateTemplate().get("cn.cslg.Trace", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }

2012年12月16日星期日

VMware无法识别USB设备的解决方法

我的虚拟机上认不到USB设备,发现是VMware USB Arbitration Service服务没有启动,手动启动VMware USB Arbitration Service服务,再重启VMware,虚拟机就能识别出USB设备了。

具体步骤:
1.点击开始->运行,在对话框中输入"services.msc",确定,打开windows服务管理器。

2.在服务列表中选中"VMware USB Arbitration Service",双击打开属性对话框,再选择"启动",就能启动VMware USB Arbitration Service服务了。

3.关闭VMware软件,并重新打开,启动一个虚拟机,进入系统之后VMware就会提示发现USB设备。如果要在虚拟机中使用这些USB设备(以USB摄像头为例),在VMware的菜单栏中选择VM->Removable Devices->Pixart Imaging CIF Single Chip->Connect (Disconnect form host) ,就可以了。当然,这样USB设备在连接到虚拟机的同时会断开同主机(一般为Windows系统)的连接。如果想重新在主机上使用USB设备,则在VMware菜单栏中选择VM->Removable Devices->Pixart Imaging CIF Single Chip->Disconnect (Connect to host) 。

另外补充一点:如果是AMD平台的机器,有可能会出现无法启动VMware USB Arbitration Service服务,这是AMD主板驱动中的"USB过滤器"所导致的。

解决办法是:在AMD主板驱动中,选择"ATI catalyst管理器",里面有选择"usb 过滤管理器",将其卸载之后即可启动VMware USB Arbitration Service服务。

2012年12月15日星期六

使用MyEclipse生成hibernate pojo和dao的过程

 

首先在MyEclipse中配置好数据源并打开。

选择需要生成pojo的表。

在右键菜单中选择 Hibernate Reverse Engineering,按下面的步骤进行设置。

生成pojo和dao之后,可以移动到相关的包。在DAO类中可以通过重构,将方法提取到DAO接口。

注意:如果表中没有主键,则会生成一个额外的类,并使用全部字段作为联合主键。

 

QQ截图20121215185333

 

QQ截图20121215185352

QQ截图20121215185407

2012年12月11日星期二

RDCAutoTypeAndTCATO KeePass Plugin

 

http://rdc-keepass-plugin.appspot.com/

更改android AVD模拟器创建路径位置的方法

使用eclipse创建的android AVD模拟器,默认位置一般在用户文件夹下的.android文件夹中,并且路径不可有中文。而用户文件夹一般都在系统盘,所以当创建的模拟器过多并且占用空间过大时,自然免不了导致系统盘空间紧张。那么如何修改移动AVD创建的默认位置呢?方法参考如下。

打开:计算机-->系统属性-->环境变量—>在“系统变量”那选择“新建”-->变量名为 "ANDROID_SDK_HOME” (注意,必须为这个名字!),然后把变量值改为你想把AVD所在的".android”文件夹放置的位置(如:D:\my documents)。

然后我们重启Eclipse,在Eclipse里可以看到:

preferneces ---> Android ----> Build Setting ----> Default debug keystore: D:\my documents\\.android\debug.keystore

即表明修改生效。

android avd

注意:如果你之前已经创建过avd模拟器,请把 在当前用户下的 .android文件夹删除,然后重新启动eclipse创建。或者剪切该文件夹到你设置的位置,并更改android**.ini文件里的路径为复制后的路径。

当然,你也可以用cmd命令来自定义创建AVD模拟器,此处不作过多论述。

本文来源于:『志文工作室 - 计算机基础技术学习博客
详细地址:http://www.zhiwenweb.cn/Category/Learning/android-avd-path.html

2012年12月10日星期一

Oracle创建表设置自动增长列范例


1、创建一个用户表t_sys_user,其中有id,login_name,login_pwd三个字段,ID为自动增长列:
Java代码 
  1. create table t_sys_user  
  2. (  
  3.   id number(6) not null primary key,  
  4.   login_name varchar2(50) not null,  
  5.   login_pwd varchar2(50) not null  
  6. );  
 2、创建序列:
Java代码 
  1. create sequence seq_user  
  2.        increment by 1       --指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。  
  3.        start with 1     --指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。  
  4.        maxvalue 9999        --指定序列可生成的最大值。  
  5.        cycle nocache        --一直累加,不循环   
 3、创建触发器:
Java代码 
  1. create or replace trigger tri_user  
  2.            before insert on t_sys_user for each row  
  3.        begin  
  4.            select seq_user.nextval into:new.id from dual;   --这里是最容易出错的地方  
  5.        end;  
  6.        /  

2012年2月19日星期日

ACM在线评判系统的原理

 

一、自动编译

在程序中通过启动编译器进程对源文件进行编译,通过获取编译器进程的错误输出流和标准输出流对象,可以获取编译器的输出,判断是否有编译错误发生,同时,再通过检查源文件目录下有无生成的可执行文件或者class文件,可判断最后的连接是否成功

二、运行和判断核心

如果自动编译成功,则需要根据预定义的测试用例对生成的可执行文件进行判断。过程大致如下:

1 主程序

1.1 在主程序中输入可执行文件名,相关的命令行参数,测试用例的个数,测试用例的执行时间限制,内存使用限制,测试用例文件名信息(输入文件和输出文件必须是成对出现的);

1.2 创建RunCmd对象,通过构造方法的参数将第一步输入的数据传递给RunCmd对象,启动RunCmd的方法doWork作为线程体进行评判。

2 线程RunCmd(doWork)

2.1 创建一个新的进程,相关参数为第一步中的可执行文件名和相关的命令行参数,并设置进程的输入输出和标准错误输出的重定向

2.2 启动进程,获取其标准输入流对象

2.3 打开一个测试用例输入文件,将其中的内容写入到2.2启动的进程的标准输入

2.4 获取进程的内存使用大小

2.5 线程睡眠一段时间(长度为测试用例的最长执行时间限制)

2.6 如果进程未结束,则杀死进程,将超时的代码写到标准输出,线程返回

2.7 如果内存使用超过限制,则将Time Limit Exceeded的代码写到标准输出,线程返回

2.8 获取标准错误输出和标准输出的内容

2.8.1 如果进程返回代码不为0或标准错误输出内容不为空,则将Run Time Error的代码写到标准输出,线程返回

2.8.2 将获得的输出结果与测试用例中的输出文件进行比较,将返回Wrong Answer,Accepted或者Presentation Error的代码

2.8.3 输出执行时间、内存大小等信息到标准输出

2.9 如果在执行过程中遇到内存不足或其他异常,则输出system error的代码或者Output Limit Exceeded的代码

在这个核心的基础上,很容易就可以开发出ACM OJ系统,在线考试系统,实验自动批改的系统等

使用AutoIT进行AutoCAD2006的批量自动注册

 

在机房管理中,有时需要对软件注册,而AutoDesk和Adobe的软件在注册时很蛋疼,每台机器都必须单独对软件进行注册,系统克隆和硬件同传系统是没用的,所以用AutoIT做了一个尝试,可以扩展到类似的软件注册过程中


#include <ie.au3>


Run("C:\\Program Files\\AutoCAD 2006\\acad.exe")
WinWaitActive("AutoCAD 2006 产品激活")
Send("{ENTER}")
_IELoadWait($oIE)
Sleep(5000)
;Get Request Code
$oIE=_IEAttach("现在注册","Embedded")
_IELoadWait($oIE)
$s=_IEBodyReadText($oIE)
$s=StringRegExpReplace($s,"(\r\n)"," ")
$s1=StringRegExp($s,"([\w\d]{4}\s[\w\d]{4}\s[\w\d]{4}\s[\w\d]{4}\s[\w\d]{4}\s[\w\d]{4}\s[\w\d]{4})",1)
if @error=0 Then
    $requestCode=$s1[0]
Else
    MsgBox(0,"","error")
EndIf
Send("{TAB}{DOWN}{TAB}{TAB}{TAB}{ENTER}")
_IELoadWait($oIE)
Sleep(5000)
Send("{DOWN}{TAB}")


;;run keygen and get authenticate code
Run("@keygen.exe")
WinWaitActive("Autodesk AutoCAD 2006 keygen by AGAIN")
Send($requestCode)
$AuthenticateCode=ControlGetText("Autodesk AutoCAD 2006 keygen by AGAIN","","Edit2")
WinClose("Autodesk AutoCAD 2006 keygen by AGAIN")
;;

WinActivate("AutoCAD 2006")
Send($AuthenticateCode)
Send("{TAB}{TAB}{Enter}")
_IELoadWait($oIE)
Sleep(1000)
Send("{TAB}{TAB}{TAB}{Enter}")
Sleep(30000)

WinClose("AutoCAD 2006")

使用AutoIT编写的常熟理工学院-锐捷VPN登录器

首先要使用IE正常登录一次VPN,目的是安装SSL VPN的浏览器插件,因为这个登录器的目的是隐藏IE窗口进行登录,这样不要一直保持一个打开的浏览器窗口。

代码如下:

#include <ie.au3>
#include <array.au3>
#include <date.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <GuiListBox.au3>
#include <base64.au3>
#include <winapi.au3>

Global $oIE,$oFlag
$oFlag=False

Opt("TrayMenuMode", 1)
;Opt("TrayOnEventMode", 1) ;响应托盘事件
Opt("WinTitleMatchMode", 2) ;匹配任意位置字符串

#Region ### START Koda GUI section ### Form=D:\Tools\KodaFormDesigner\Forms\RgVPN.kxf
$Form1 = GUICreate("RGVPN-锐捷VPN登录器", 323, 109, 192, 124)
$Label1 = GUICtrlCreateLabel("用户名", 16, 12, 40, 17)
$txtUsername = GUICtrlCreateInput("", 72, 10, 129, 21)
$Label2 = GUICtrlCreateLabel("密码", 16, 40, 28, 17)
$txtPassword = GUICtrlCreateInput("", 72, 38, 129, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
$btnLogin = GUICtrlCreateButton("登录", 224, 8, 73, 25)
$BtnLogout = GUICtrlCreateButton("注销", 224, 36, 73, 25)
$Label3 = GUICtrlCreateLabel("验证码", 16, 72, 40, 17)
$txtVCode = GUICtrlCreateInput("", 72, 70, 57, 21)
$Pic1 = GUICtrlCreatePic("", 136, 72, 60, 20)
$btnRefresh = GUICtrlCreateButton("看不清?", 208, 72, 89, 25)

TraySetIcon("", -1)
TraySetClick(64)
$MenuItem1 = TrayCreateItem("恢复窗口")
$MenuItem2 = TrayCreateItem("退出")
$MenuItem3 = TrayCreateItem("关于")
;TraySetOnEvent($MenuItem1,restore)
;TraySetOnEvent($MenuItem2,quit)
;TraySetOnEvent($MenuItem3,about)
TraySetState()
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUICtrlSetState($BtnLogout,$GUI_DISABLE)
GUICtrlSetState($BtnLogin,$GUI_ENABLE)
GUICtrlSetState($BtnRefresh,$GUI_ENABLE)

LoadHomePage()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            if $oFlag=True Then
                Run("cmd /c start close.exe")
                Sleep(1000)
                _IELinkClickByText($oIE,"注    销")
            EndIf
            _IEErrorHandlerDeRegister()
            _IEQuit($oIE)
            Exit

        Case $GUI_EVENT_MINIMIZE
            GUISetState(@SW_HIDE)

        Case $btnRefresh
            _IENavigate($oIE,"
https://61.155.18.8/",1)
            _IELoadWait($oIE)
            Sleep(300)
            $oIE.document.getElementById("overridelink").Click
            _IELoadWait($oIE)
            Sleep(300)
            $oImg = _IEImgGetCollection ($oIE, 8)
            $oPic = $oIE.Document.body.createControlRange()
            $oPic.Add($oImg)
            $oPic.execCommand("Copy")
            $bmp = ClipGet()
            GUICtrlSetImage($pic1,$bmp)

        Case $btnLogin
            GUICtrlSetState($BtnLogout,$GUI_DISABLE)
            GUICtrlSetState($BtnLogin,$GUI_DISABLE)
            GUICtrlSetState($BtnRefresh,$GUI_DISABLE)
            $formUsername=$oIE.document.getElementById("username")
            $formPasswd=$oIE.document.getElementById("passwd")
            $chkCode=$oIE.document.getElementById("chkCode")
            $username=_GUICtrlEdit_GetText($txtUsername)
            $password=_GUICtrlEdit_GetText($txtPassword)
            $vcode=_GUICtrlEdit_GetText($txtVCode)
            if $username<>"" AND $password<>"" AND $vcode<>"" Then
                _IEFormElementSetValue($formUsername,$username)
                _IEFormElementSetValue($formPasswd,$password)
                _IEFormElementSetValue($chkCode,$vcode)
                $oForm=_IEFormGetObjByName($oIE,"Login")
                $oSubmit=_IEFormElementGetObjByName($oForm,"submit")
                _IEAction($oSubmit,"click")
                _IELoadWait($oIE)
                Sleep(300)
                Local $str=$oIE.Document.body.innerHtml
                Local $b=StringRegExp($str,"重新登录",1)
                if @error=0 Then
                    GUICtrlSetState($BtnLogout,$GUI_ENABLE)
                    GUICtrlSetState($BtnRefresh,$GUI_DISABLE)
                    GUICtrlSetState($BtnLogin,$GUI_DISABLE)
                    Sleep(20000)
                    MsgBox(0,"VPN","登录成功")
                    $oFlag=True
                Else
                    MsgBox(0,"VPN","登录失败")
                    GUICtrlSetState($BtnLogout,$GUI_DISABLE)
                    GUICtrlSetState($BtnLogin,$GUI_ENABLE)
                    GUICtrlSetState($BtnRefresh,$GUI_ENABLE)
                EndIf
            Else
                GUICtrlSetState($BtnLogout,$GUI_DISABLE)
                GUICtrlSetState($BtnLogin,$GUI_ENABLE)
                GUICtrlSetState($BtnRefresh,$GUI_ENABLE)
            EndIf

        Case $BtnLogout
            Run("cmd /c start close.exe")
            Sleep(2000)
            _IELinkClickByText($oIE,"注    销")
            _IEErrorHandlerDeRegister()
            ;_IEQuit($oIE)
            Exit

    EndSwitch
    $msg = TrayGetMsg()
    Select
        Case $msg = $MenuItem1
            GUISetState(@SW_SHOWNORMAL)

        Case $msg = $MenuItem2
            quit()

        Case $msg = $MenuItem3
            aboutme()
    EndSelect
WEnd

Func restore()
    GUISetState(@SW_RESTORE)
EndFunc

Func quit()
    if $oFlag=True Then
        Run("cmd /c start close.exe")
        Sleep(2000)
        _IELinkClickByText($oIE,"注    销")
    EndIf
    _IEErrorHandlerDeRegister()
    ;_IEQuit($oIE)
    Exit
EndFunc

Func aboutme()
    MsgBox(0,"锐捷VPN拨号器","常熟理工学院计算机学院 沈健(jimshen@gmail.com,QQ:3262743)版权所有")
EndFunc


Func LoadHomePage()
    _IEErrorHandlerRegister("MyErrFunc")
    $oIE=_IECreate("
https://61.155.18.8/",0,0,1,0)
    _IELoadWait($oIE)
    Sleep(300)
    $oIE.document.getElementById("overridelink").Click
    _IELoadWait($oIE)
    Sleep(300)
    $oImg = _IEImgGetCollection ($oIE, 8)
    $oPic = $oIE.Document.body.createControlRange()
    $oPic.Add($oImg)
    $oPic.execCommand("Copy",False)
    $bmp = ClipGet()
    GUICtrlSetImage($pic1,$bmp)
EndFunc

Func MyErrFunc()
    ; Important: the error object variable MUST be named $oIEErrorHandler
    Local $ErrorScriptline = $oIEErrorHandler.scriptline
    Local $ErrorNumber = $oIEErrorHandler.number
    Local $ErrorNumberHex = Hex($oIEErrorHandler.number, 8)
    Local $ErrorDescription = StringStripWS($oIEErrorHandler.description, 2)
    Local $ErrorWinDescription = StringStripWS($oIEErrorHandler.WinDescription, 2)
    Local $ErrorSource = $oIEErrorHandler.Source
    Local $ErrorHelpFile = $oIEErrorHandler.HelpFile
    Local $ErrorHelpContext = $oIEErrorHandler.HelpContext
    Local $ErrorLastDllError = $oIEErrorHandler.LastDllError
    Local $ErrorOutput = ""
    $ErrorOutput &= "--> COM Error Encountered in " & @ScriptName & @CR
    $ErrorOutput &= "----> $ErrorScriptline = " & $ErrorScriptline & @CR
    $ErrorOutput &= "----> $ErrorNumberHex = " & $ErrorNumberHex & @CR
    $ErrorOutput &= "----> $ErrorNumber = " & $ErrorNumber & @CR
    $ErrorOutput &= "----> $ErrorWinDescription = " & $ErrorWinDescription & @CR
    $ErrorOutput &= "----> $ErrorDescription = " & $ErrorDescription & @CR
    $ErrorOutput &= "----> $ErrorSource = " & $ErrorSource & @CR
    $ErrorOutput &= "----> $ErrorHelpFile = " & $ErrorHelpFile & @CR
    $ErrorOutput &= "----> $ErrorHelpContext = " & $ErrorHelpContext & @CR
    $ErrorOutput &= "----> $ErrorLastDllError = " & $ErrorLastDllError
    ;MsgBox(0, "COM Error", $ErrorOutput)
    SetError(1)
    Return
EndFunc

在运行的过程中IE窗口弹出的消息框,通过另一个进程来自动关闭

#include <IE.au3>

while true
    WinWaitActive("来自网页的消息","")
    If WinActive("来自网页的消息","") Then
        Send("{ENTER}")
        ExitLoop
    endif
wend

while true
    WinWaitActive("Windows Internet Explorer","")
    If WinActive("Windows Internet Explorer","") Then
        Send("{ENTER}")
        ExitLoop
    endif
wend

Exit

在InnoSetup中检测和安装.NET Framework和MySQL Connector/NET

 

[Files]
Source: "D:\VOS\share\tncs\dotnetfx.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
Source: "D:\VOS\share\tncs\mysql-connector-net-6.4.3.msi"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall 
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”

[Run]
Filename: "{tmp}\dotnetfx.exe"; Parameters: “/Q /NORESTART”; Check: IsFramework20Installed; Flags: runhidden shellexec waituntilterminated hidewizard;
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysql-connector-net-6.4.3.msi"""; Check: IsMysqlConnectorNetInstalled; Flags: hidewizard

[Code]  
function IsFramework20Installed():Boolean;
begin
    Result := not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\.NetFramework\Policy\v2.0');
end;

function IsMysqlConnectorNetInstalled():Boolean;
begin
    Result := not RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\MySQL AB\MySQL Connector/Net');
end;