
2010年5月26日
最近經(jīng)常做一些數(shù)據(jù)導(dǎo)入的工作!做數(shù)據(jù)挖掘項目大家都懂的...
導(dǎo)入數(shù)據(jù)最痛苦的就是等待他導(dǎo)...不過如果大家沒注意一些需要注意的東西,可能大家會這樣反復(fù)等好多次!!
一、
首先,我也是多次吃虧的一件事情,就是老是忘記加入導(dǎo)入日志。因為在導(dǎo)入數(shù)據(jù)的時候可能會拋出很多異常,這些異常如果不記錄下如果缺失了重要的數(shù)據(jù)可能要從新導(dǎo)入或找到原因然后重導(dǎo)。太可惜了。加入導(dǎo)入日志一切有據(jù)可查,非常重要。
它的做法可以在imp時直接加參數(shù):
log=/oracle/log/imp.log (linux)
log=E:\log\imp.log (windows)
指定日志的路徑和文件名
例如:
imp trade/zhangy@orcl file=/test/trade.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle/log/imp.log
這樣就有日志了...
二、導(dǎo)入單個表
可能客戶給我們一個整庫文件,但是我們可能只需要其中的一些表就OK了。oracle已經(jīng)帶有導(dǎo)入單獨表的語法。
IMP trade/trade file=D:\2011-02-18_trade.dmp IGNORE=Y TABLES=(TOS_ContractInterval,TOS_CONTRACTMASTER) FULL=N
當(dāng)然還有許多語法,我們可以通過imp help=yes來查看..
posted @
2011-06-02 20:04 張元Won 閱讀(612) |
評論 (0) |
編輯 收藏
因為新配置的機器,裝的Oracle10g一直都沒使用過。因為參與到項目,昨天突然用Oracle發(fā)現(xiàn)用Plsql不上Oracle了。
蝦米原因?...搞的我蛋疼了一上午...
于是一直找帖糾結(jié)這個問題,終于還是解決了,在博客中留個記錄以便以后忘記了翻翻。
導(dǎo)致這個錯誤的原因有很多
可能是SID配置不對,但絕大多數(shù)是因為Oracle程序本身問題。就是OracleOraDb10g_home1TNSListener這個服務(wù)對應(yīng)的D:\oracle\product\10.2.0\db_1\BIN\TNSLSNR執(zhí)行程序沒有執(zhí)行或者執(zhí)行中斷造成的。那么我們只要設(shè)置一個全局SID服務(wù)變量,以后就可以都以這個變量為準(zhǔn)來查找到監(jiān)聽了。
解決方法如下:
打開:%Oracle_Hoem%/network/admin/listener.ora文件 在
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\Oracle\Oracle10g)
(PROGRAM = extproc)
)
后面添加:
(SID_DESC =
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\Oracle\Oracle10g)
(SID_NAME = ORACLE)
)
最后變成:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\Oracle\Oracle10g)
(PROGRAM = extproc)
) (SID_DESC =
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\Oracle\Oracle10g)
(SID_NAME = ORACLE)
)
)
posted @
2011-05-27 09:17 張元Won 閱讀(1013) |
評論 (0) |
編輯 收藏
第一步: 取消自動validation
validation有一堆,什么xml、jsp、jsf、js等等,我們沒有必要全部都去自動校驗一下,只是需要的時候才會手工校驗一下!
取消方法:
windows–>perferences–>myeclipse–>validation
除開Manual下面的復(fù)選框全部選中之外,其他全部不選
手工驗證方法:
在要驗證的文件上,單擊鼠標(biāo)右鍵–>myeclipse–>run validation
第二步:取消Eclipse拼寫檢查
1、拼寫檢查會給我們帶來不少的麻煩,我們的方法命名都會是單詞的縮寫,他也會提示有錯,所以最好去掉,沒有多大的用處
windows–>perferences–>general->editors->Text Editors->spelling
第三步:取消myeclipse的啟動項
myeclipse會有很多的啟動項,而其中很多我們都用不著,或者只用一兩個,取消前面不用的就可以
windows–>perferences–>general–>startup and shutdown 啟動項功能如下,可以根據(jù)自己的需要選擇
Automatic Updates Scheduler
MyEclipse QuickSetup
MyEclipse Derby
MyEclipse EASIE Geronimo 1
MyEclipse EASIE Geronimo 2
MyEclipse EASIE JBOSS 2
MyEclipse EASIE JBOSS 3
MyEclipse EASIE JBOSS 4
MyEclipse EASIE JBOSS 5
MyEclipse EASIE JBOSS
MyEclipse EASIE Jetty 4
MyEclipse EASIE Jetty 5
MyEclipse EASIE Jetty 6
MyEclipse EASIE Jetty
MyEclipse EASIE JOnAS 3
MyEclipse EASIE JOnAS 4
MyEclipse EASIE JOnAS
MyEclipse EASIE JRun 4
MyEclipse EASIE JRun
MyEclipse EASIE Oracle 10 AS
MyEclipse EASIE Oracle 9 AS
MyEclipse EASIE Oracle AS
MyEclipse EASIE Orion 1
MyEclipse EASIE Orion 2
MyEclipse EASIE Resin 2
MyEclipse EASIE Resin 3
MyEclipse EASIE Resin
MyEclipse EASIE Sun 8.x
MyEclipse EASIE Sun 8
MyEclipse EASIE Sun 9
MyEclipse EASIE Glassfish 2
MyEclipse EASIE Glassfish 1
MyEclipse EASIE Sun One
MyEclipse EASIE MyEclipse Tomcat 6 Server
MyEclipse EASIE Tomcat 4
MyEclipse EASIE Tomcat 5
MyEclipse EASIE Tomcat 6
MyEclipse EASIE Tomcat
MyEclipse EASIE WebLogic 10
MyEclipse EASIE WebLogic 6
MyEclipse EASIE WebLogic 7
MyEclipse EASIE WebLogic 8
MyEclipse EASIE WebLogic 9
MyEclipse EASIE WebLogic
MyEclipse EASIE WebSphere 5
MyEclipse EASIE WebSphere 6.1
MyEclipse EASIE WebSphere 6
MyEclipse EASIE WebSphere 4
MyEclipse Examples
MyEclipse Memory Monitor
MyEclipse Tapestry Integration
MyEclipse JSP Debug Tooling
MyEclipse File Creation Wizards
ICEfaces Integration for MyEclipse
MyEclipse Backward Compatibility
MyEclipse Perspective Plug-in
Pluse Collaboration Control Center
eclipse-cs 4.x.x -> 5.0.0 Migration Plug-in
Mozilla Debug UI Plug-in(Incubation)
Dynamic Languages ToolKit Core UI
WTP Webservice UI Plug-in
JavaServer Faces Tools - Core
Automatic Updates Scheduler
Service policy
Atfdebug Plug-in(Incubation)
Auxiliary Web Module Support for MeEclipse
JSF Editor Preview Support for MyEclipse
第五步: 更改內(nèi)存使用文件
1、打開 eclipse.ini
-startup
../Common/plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
../Common/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-install
D:/Myeclipse 8.5/Program
-vm
D:/Myeclipse 8.5/Common/binary/com.sun.java.jdk.win32.x86_1.6.0.013/jre/bin/client/jvm.dll
-configuration
configuration
-vmargs
-Xmx512m
-XX:MaxPermSize=1024m
-XX:ReservedCodeCacheSize=128m
把下面的那個 -XX:MaxPermSize 調(diào)大,比如 -XX:MaxPermSize=1024M,再把 -XX:PermSize 調(diào)成跟 -XX:MaxPermSize一樣大
原因:大家一定對這個畫面很熟悉吧:
幾乎每次 eclipse 卡到當(dāng)都是因為這個非堆內(nèi)存不足造成的,把最大跟最小調(diào)成一樣是因為不讓 myeclipse 頻繁的換內(nèi)存區(qū)域大小
注意:XX:MaxPermSize 和 Xmx 的大小之和不能超過你的電腦內(nèi)存大小
經(jīng)理比較奢侈,就調(diào)到了1024
第六步: 取消Maven更新(啟動更新)
Window > Preferences > Myeclipse> Maven4Myeclipse > Maven>禁用Download repository index updates on startup
改快捷鍵之類的經(jīng)理就不介紹了。
posted @
2010-11-17 10:25 張元Won 閱讀(18463) |
評論 (5) |
編輯 收藏
最近發(fā)現(xiàn)很多朋友連攔截器都不知道,于是想寫個BLOG總結(jié)一下。
java攔截器的基本原理其實非常簡單,說白了就是動態(tài)代理類。
下面來看一個簡單的例子
首先,我建立一個攔截器的類InterceptorClass,這里的before()和after()方法是以后攔截器會執(zhí)行的方法
CODE清單一:

public class InterceptorClass
{

public void before()
{
System.out.println("攔截器InterceptorClass方法調(diào)用:before()!");
}

public void after()
{
System.out.println("攔截器InterceptorClass方法調(diào)用:after()!");
}
}
我們模擬一個業(yè)務(wù)組件接口BusinessInterface,和一個業(yè)務(wù)組件實現(xiàn)類BusinessClass
CODE清單二:

public interface BusinessInterface
{
public void doSomething();
}
CODE清單三:

public class BusinessClass implements BusinessInterface
{

public void doSomething()
{
System.out.println("業(yè)務(wù)組件BusinessClass方法調(diào)用:doSomething()");
}
}
然后,創(chuàng)建一個動態(tài)代理類DynamicProxyHandler,這個類是集成InvocationHandler接口的,動態(tài)類的原理實際上是使得當(dāng)你執(zhí)行一個動態(tài)方
法的時候,他可以把這個動態(tài)方法dispatch到這個動態(tài)類上來。這樣,你就可以在這個方法的前后嵌入自己的一些方法。
CODE清單四:
//包含了業(yè)務(wù)對象綁定動態(tài)代理類的處理,并實現(xiàn)了InvocationHandler接口的invoke方法

public class DynamicProxyHandler implements InvocationHandler
{
private Object business;//被代理對象
private InterceptorClass inceptor = new InterceptorClass();//攔截器
// 動態(tài)生成一個代理類對象,并綁定被代理類和代理處理器

public Object bind(Object business)
{
this.business = business;
return Proxy.newProxyInstance(
//被代理類的ClassLoader
business.getClass().getClassLoader(),
//要被代理的接口,本方法返回對象會自動聲稱實現(xiàn)了這些接口
business.getClass().getInterfaces(),
//代理處理器對象
this);
}
// 代理要調(diào)用的方法,并在方法調(diào)用前后調(diào)用連接器的方法

/** *//**
* @param proxy 代理類對象
* @param method 被代理的接口方法
* @param args 被代理接口方法的參數(shù)
* @throws Throwable
*/
public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable
{
Object result = null;
inceptor.before();
result=method.invoke(business,args);
inceptor.after();
return result;
}

OK,我們來寫個類測試一下
CODE清單五:

public static void main(String[] args)
{
//生成動態(tài)代理類實例
DynamicProxyHandler handler = new DynamicProxyHandler();
//生成待測試的業(yè)務(wù)組件對象
BusinessInterface business = new BusinessClass();
//將業(yè)務(wù)組件對象和動態(tài)代理類實例綁定
BusinessInterface businessProxy = (BusinessInterface) handler.bind(business);
//用動態(tài)代理類調(diào)用方法
businessProxy.doSomething();
}
來看看結(jié)果:

近期struts2很流行,而且攔截器是struts2里面一個比較好的功能,下面舉個例子說明一下攔截器在struts2中的用法。
struts2對攔截器實現(xiàn)做了一個封裝,使得我們在實現(xiàn)的時候比較簡單。
首先我們要建一個攔截器類
CODE清單六:

public class AuthorizationInterceptor extends AbstractInterceptor
{
@Override

public String intercept(ActionInvocation invocation) throws Exception
{
Map session = invocation.getInvocationContext().getSession();
String userName = (String) session.get("userName");

if ( userName != null && userName.equals("test"))
{
System.out.println("攔截器:合法用戶登錄---");
return invocation.invoke();
}
else

{
System.out.println("攔截器:用戶未登錄---");
return Action.LOGIN;
}
}
}

這個類是必須要繼承struts2包中提供的AbstractInterceptor類,這個類有一個抽象方法intercept,這個方法是必須要實現(xiàn)的。
那么經(jīng)理在這個攔截器里面寫了一個簡單的實現(xiàn),對url用戶合法性做了一個限制。
接下來比較關(guān)鍵的是過濾器在struts2中的配置,先看看代碼
CODE清單七:
<package name="system" extends="struts-default">
<interceptors>
<!-- 定義權(quán)限控制攔截器 -->
<interceptor name="authority"

class="com.sharesin.biz.common.intercepts.struts2.AuthorizationInterceptor"/>
<!-- 定義一個包含權(quán)限控制的攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="authority"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--定義默認攔截器 -->
<default-interceptor-ref name="mystack" />
<!--定義全局處理結(jié)果 -->
<global-results>
<result name="login">index.jsp</result>
</global-results>
<action name="login_*" class="com.sharesin.biz.web.system.LoginAction" method="{1}">
<result name="success">system/homepage.jsp</result>
</action>
</package>


在interceptors節(jié)點里,我們可以定義多個攔截器,這里的名為authority的只是其中的一個。struts2的攔截器棧我是先執(zhí)行struts2默認的攔
截器defaultStack,然后再執(zhí)行我的。然后只需要用default-interceptor-ref標(biāo)簽設(shè)置好這個system包中的默認攔截器為這個攔截器就OK了。
struts2中引入了package這個概念,我覺得十分實用,當(dāng)然這對struts2攔截器也是個實惠,我們可以根據(jù)不同的action來分包和不同的攔截器
ok,來運行測試一下。

結(jié)果..

posted @
2010-09-06 17:21 張元Won 閱讀(4515) |
評論 (3) |
編輯 收藏
摘要: 在FLEX開發(fā)中有一些小技巧,經(jīng)理在這里總結(jié)下,方便以后查閱,也希望能和大家一起交流。
這些小功能在實際開發(fā)中是很經(jīng)常用的。
一、在DataGrid的列中加圖片
做報表的時候經(jīng)常會在DataGrid中加入一些刻度條或者增減的圖片表示一些API指標(biāo)值,其實這個功能FLEX可以實現(xiàn)。
在DataGrid-colums-DataGridColumn中有個itemRenderer屬性,...
閱讀全文
posted @
2010-09-03 11:39 張元Won 閱讀(3920) |
評論 (1) |
編輯 收藏
在使用flex過程中經(jīng)常會對調(diào)樣式感到頭痛,經(jīng)理在這里準(zhǔn)備把常用的一些東東總結(jié)一下,以便以后查閱。
以后慢慢總結(jié)。
一、公用
1.includeInLayout:它的作用是當(dāng)使用visible隱藏對象的時候,該對象不會占位。
2.字體:fontsize:全局字體大小,推薦設(shè)置12。font-family:"ARIAL"。這些在CSS中設(shè)定好
二、Panel
1.headerHeight:Panel頭的寬度,這里一般設(shè)置成15比較舒服。
2.borderThicknessBottom:Panel控件下邊框的粗細,一般設(shè)置成2比較舒服。
3.borderThicknessLeft:Panel左邊框的粗細,一般設(shè)置成2比較舒服。
4.borderThicknessRight:Panel右邊框的粗細,一般設(shè)置成2比較舒服。
5.backgroundImage:如果覺得Panel的白色北京太丑,那就用這個換一個漸變背景吧。
簽和屬性/pic2010082721.jpg)
三、DataGrid&AdvancedDataGrid
1.headerColors:用于繪制標(biāo)題背景漸變的兩種顏色的數(shù)組。推薦[#60beff,#1273ce],藍色漸變
2.alternatingItemColors:交替模式中行的顏色。此值可以是由多種顏色中任意兩種所組成的數(shù)組。推薦[#FFFDCE, #C8ECFF],淺藍和黃色。
3.headerWordWrap:則指定標(biāo)題文本不適合一行時將換行。(這是在AdvancedDataGridColumnGroup中設(shè)置的)。
4.一個標(biāo)志,指示當(dāng)此列中各行的文本不能在一行中顯示時,是否能夠自動換行(這是在DataGridColumn中設(shè)置的)。
四、Chart
1.showDataTips:指定Flex是否顯示圖表的提示窗口控件。
2.verticalAxis-CategoryAxis-Title:單位可以加在坐標(biāo)軸上。
3.GradientEntry:設(shè)置圖表的漸變色。詳見第..
http://www.tkk7.com/zhangyuan/archive/2010/09/03/330847.html
如下CODE
1
<mx:BarSeries xField="costs" >
2
<mx:fill>
3
<mx:LinearGradient>
4
<mx:GradientEntry color="#A6A602" ratio="0" />
5
<mx:GradientEntry color="#DFDF97" ratio=".2" />
6
<mx:GradientEntry color="#A6A602" ratio=".4" />
7
<mx:GradientEntry color="#F5F655" ratio=".8" />
8
<mx:GradientEntry color="#A6A602" ratio="1" />
9
</mx:LinearGradient>
10
</mx:fill>
11
</mx:BarSeries>
posted @
2010-08-27 15:44 張元Won 閱讀(3014) |
評論 (0) |
編輯 收藏
cognos中有列表和圖形,但是表和圖之間總是孤立的,刷新頁面也都是全頁面刷新,于是經(jīng)理在想,是否有個方法能在點擊cognos列
表時旁邊的cognos圖表能夠?qū)崟r的變動,類似flex中的綁定效果。在老板的強烈催促下,經(jīng)理也沒什么時間去網(wǎng)上去找去問,覺得憑自己以前
的一些J2EE老底子加上report studio中強大的HTML項目貌似可以搞定,于是開搞了...
首先給大家看看數(shù)據(jù)庫

一、先用report studio建立一個帶參數(shù)的cognos餅圖報表(這里可以隨便是什么圖),報表灰常簡單

設(shè)置參數(shù)名為par3,并把此報表保存為a1
二、再用report studio建立一個列表,如圖

經(jīng)理在這里多用了html項目,因為cognos在頁面上封裝的太好了,只能這樣拼湊腳本。
基本的原理就是在列表旁邊放置一個html項目,其內(nèi)容是一個iframe,其連接也就是剛剛做好的那個帶參數(shù)的餅圖報表。
然后在列表中放置一個label,在label中設(shè)置點擊事件出來iframe鏈接(其實這樣就換了一個參數(shù))及重新載入。
其中
1的代碼如下,他主要是點擊的列表觸發(fā)的事件
1
<script type="text/javascript">
2
function changeframe(par)
3
{
4
sname="http://localhost/cognos8/cgi-bin/cognos.cgi?b_action=cognosViewer&ui.object=/content/package[@name='aa']/report[@name='a1']&ui.action=run&run.prompt=false&p_par3="+par;
5
frameChart.location.href=sname;
6
}
7
</script>
2到6主要就是定義一個含有點擊事件的label
2的代碼為
1
<u><label onclick="changeframe('
3其實是一個報表表達式,它是參數(shù)
1
[query1].[arr2]
4的代碼為
1
');" style="width:100%;height:100%" >
5也是一個報表表達式,他是設(shè)置該列顯示的內(nèi)容
1
[arr2]
6的代碼為,他收個尾
1
</label ></u>
7的代碼主要是iframe,然后就是刷新等待時候的一個等待提示
7的代碼為
1
<iframe frameborder="0" id="frameChart" src="" scrolling="no" height="450" width="100%"></iframe>
2
<div id="loading" style="display:block; padding:100px 0 100px 0;text-align:center;color:#999999;font-size:12px;">
3
頁面加載中
4
</div>
5
<script type="text/javascript">
6
var a = document.getElementById("frameChart");
7
var b = document.getElementById("loading");
8
a.style.display = "none";
9
b.style.display = "block";
10
11
if (window.ActiveXObject)
{
12
13
14
a.onreadystatechange = function()
15
{
16
if (this.readyState=="complete")
17
{
18
b.innerHTML = "";
19
b.style.display = "none";
20
a.style.display = "";
21
}
22
}
23
}else
{
24
a.style.display = "block"; //隱藏
25
b.style.display = "none";
26
}
27
</script>
拼滴我累死了.....
OK,我們來看看效果
我先點擊一下第一個單元格

再點擊第二個

注意,列表不會刷新哦,有點像ajax的效果。
后來想想,其實功能挺簡單的。
例子比較簡陋,只是想傳達一個思想,希望以后大家有好東西能一起交流。
posted @
2010-08-20 17:37 張元Won 閱讀(4318) |
評論 (4) |
編輯 收藏
對COGNOS有一定了解以后,經(jīng)理逐漸發(fā)現(xiàn)COGNOS的強大之處,特別的立方體模型使數(shù)據(jù)倉庫更有條理而且訪問速度更快。但是也了解到了COGNOS的劣勢,應(yīng)該說是IBM整體的劣勢,也就是界面太丑。雖然COGNOS也包含了幾乎所有的圖表,樣式也可以調(diào)整。但是對COGNOS的界面調(diào)整太復(fù)雜,幾乎看的比較好的COGNOS顯示界面都要有HTML對象來調(diào),更或者無論你怎么調(diào)也是基于HTML,在色彩和動畫方面不會有很大的空間了。
于是經(jīng)理在想,是不是可以把只用COGNOS對數(shù)據(jù)的抓取優(yōu)勢而在顯示層用別的方式呈現(xiàn)呢(比如flex或者別的)?如果COGNOS能開發(fā)更多的前端顯示接口固然好,但這是不可能的,當(dāng)然,經(jīng)理知道這樣做會損失一部分性能,但是對現(xiàn)在大多對界面都很挑剔的客戶,這肯定是一條比較好的路。
OK,那么現(xiàn)在經(jīng)理把做的一個java調(diào)用cognos端直接返回XML字節(jié)流的例子和大家分享下。
一、環(huán)境
硬件環(huán)境:主屏2.0Hz+內(nèi)存3gb+系統(tǒng)32位
軟件環(huán)境:cognos 8.41+Myeclipse8.5ga+sqlserver2000sp4

二、IBM Cognos Connection部分
首先,我用framework做了了一個灰常簡單的包(所謂非常簡單就是里面完全沒有維度和亮度,直接隱射的數(shù)據(jù)庫表列),并把他發(fā)布到公共文件夾,名為test_sdk_paser

然后在這個包下用report studio做了一個灰常簡單的報表,名為test

這個報表就是我們之后要在java中獲取其數(shù)據(jù)的報表。
三、COGNOS SDK調(diào)用程序
0.準(zhǔn)備步驟.
我們先要把sdk所需要的包考到項目中來。必要包的位置在D:\cognos\c8\sdk\java\lib\下,先給大家看看我的目錄結(jié)構(gòu)

1.我建立了一個config.properties文件用來存放congos服務(wù)器的ip和端口

在java中對應(yīng)寫一個從properties中獲取數(shù)據(jù)的方法

2.弄清楚報表的xpath
這個xpath我們可以在報表的 設(shè)置屬性-->常規(guī) 找到

xpath是十分重要的,其實報表ID也十分重要,這個經(jīng)理以后會跟大家寫。
3.連接cognos服務(wù)器
經(jīng)理這里用ReportService_ServiceLocator對象的getreportService方法來獲得一個ReportService_Port對象。
getreportService需要一個參數(shù),是cognos服務(wù)器地址,http://localhost/p2pd/servlet/dispatch
ReportService_Port是報表操作對象,我們就是用這個對象的run方法來運行cognos端報表。


4.設(shè)置cognos認證信息
經(jīng)理這里的cognos設(shè)置了NTML認證,那么是需要在sdk代碼中設(shè)置認證信息的。

用CAM方式進行登陸


5.設(shè)置report的參數(shù)
本例中用HashMap來傳遞report的參數(shù),用循環(huán)的方式把外界的參數(shù)從HashMap中取出來,設(shè)置到ParameterValue的value中去。

6.cognos運行報表設(shè)置
每項代表什么經(jīng)理已經(jīng)把注釋寫的很清楚了。


這里尤其提醒大家注意的一點是,RunOptionEnum.prompt這個參數(shù)一定要設(shè)置,設(shè)置這個參數(shù)是當(dāng)cognos運行有參數(shù)的report時候,不彈出html提示窗口。經(jīng)理之前就是沒有設(shè)置這個參數(shù),所以在測試帶參數(shù)報表的時候搞了一天都沒搞出來。
那么這個option到底還有多少參數(shù)呢?經(jīng)理給大家看啊看你cognos sdk的官方API

大家看到了吧,官方的API只是把枚舉值做了一個羅列,具體他們是做什么的?有什么作用?什么都沒說。經(jīng)理當(dāng)然也看了sdk的源碼,希望能在源碼中找到一點注釋,結(jié)果是:sdk的java文件沒有一行注釋代碼。
經(jīng)理在這里不想罵人,現(xiàn)在終于知道為什么cognos sdk這個領(lǐng)域這么弱了。
7.運行cognos報表并返回xml數(shù)據(jù)
經(jīng)理在這里統(tǒng)計了一下用sdk返回數(shù)據(jù)的時間。
之前講過用ReportService_Port的run方法可以讓report運行,然后返回一個叫AsynchReply的對象,這個對象中有details[]屬性,這個里面基本上包含了report返回的所有信息。而他的status屬性則標(biāo)識了此次請求是否成功。

OK,現(xiàn)在代碼都解釋完了,現(xiàn)在來測試下。

經(jīng)理在這里寫了一個簡單的測試?yán)樱弥爸v到的test_sdk_paser包中的test進行測試


下面再測試一個帶參數(shù)的報表
把之前的那個報表加一個參數(shù)

然后在這里輸入一個1

得到這樣的數(shù)據(jù)

稍微改動下代碼,然后run一下

然后得到結(jié)果是這樣的

正好和剛剛的結(jié)果一樣~~
sdk取數(shù)據(jù)關(guān)鍵的也就是上面說的7個步驟。最后依然要BS一下cognos的開發(fā)者,居然在源碼中一行注釋都沒有,幫助文檔也不全面。
所以還是集結(jié)大家的力量一起研究一起分享研究后的成果。
歡迎大家一起來博客上討論。
謝謝~
posted @
2010-08-05 21:41 張元Won 閱讀(6218) |
評論 (16) |
編輯 收藏
很早以前用過VSS的人都知道,相比之下SVN的確是個好東東。他以副本式的版本管理模式很好的解決了VSS單數(shù)據(jù)源下的簽入簽出混亂問題。但是最近發(fā)現(xiàn)很多人都不會裝SVN,經(jīng)理在這里寫個博客跟大家分享一下。
環(huán)境:
Win7系統(tǒng)
Myeclipse 8.5GA
JDK1.6
一、準(zhǔn)備工作
首先,當(dāng)然是下載軟件安裝包。(經(jīng)理這里以svn1.6為例)這里需要2個安裝程序和1個解壓包。

Setup-Subversion-1.6.6.msi這個是SVN服務(wù)器。
(你可以在這里 http://subversion.tigris.org 下載到最新版本)
TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi是SVN 版本控制系統(tǒng)的一個免費開源客戶端。
(可以在這里下載 http://tortoisesvn.net/downloads )
site-1.6.12.zip是Myeclipse的插件包。
(可以在這里下載 subclipse.tigris.org)
二、安裝svn服務(wù)器
首先安裝svn服務(wù)器(也就是Setup-Subversion-1.6.6.msi這個),按照常規(guī)安裝就OK了。然后把tortoise也安裝起來(也就是TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi這個)。
在安裝tortoise的時候會提示重啟,這里最好重啟下。

這是經(jīng)理的安裝目錄
Setup-Subversion-1.6.6.msi --> Subversion目錄
TortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msi --> TortoiseSVN目錄
svnroot目錄是什么呢?接著往下看
三、建立SVN資源庫(Repository)
svnroot是經(jīng)理建立的svn資源庫根目錄,然后在這個目錄里建立了一個名為repos的目錄。(這個目錄是經(jīng)理打算做svn資源庫的目錄)

然后在這個目錄點右鍵->TortoiseSVN->Create repository here

當(dāng)看到被建立的repos目錄中多了很多文件夾后證明資源庫創(chuàng)建成功。
在網(wǎng)上也看到有用cmd命令來創(chuàng)建的,如svnadmin create D:\svn\repository
四、配置用戶和權(quán)限
打開剛剛建立的資源庫文件夾(repos),里面有一個名為conf的文件夾,這個文件夾里都是svn的配置信息。首先打開svnserve.conf文件
這里行前凡是有#的都等于是被注釋忽略了, 你可以把#去掉讓那一行生效, 或者自己新添加行。經(jīng)理對這個文件主要修改3處
把" #anon-access = read"改為"anon-access = none"
(他表示沒有經(jīng)過驗證的用戶無任何權(quán)限,之前的意思是沒經(jīng)過驗證的用戶可以進行讀操作。經(jīng)理強烈建議該成none,不然別人沒有驗證的人都可以看到項目文件)
把" #auth-access = write"去掉#為"auth-access = write"
(通過驗證的用戶有寫操作,寫操作是包含讀操作的)
把" #password-db = passwd"去掉#為"password-db = passwd"
(密碼數(shù)據(jù)存放到passwd文件中)

打開passwd文件
設(shè)置一個用戶名如 manager=jingli
還有一個文件authz
這個文件主要是用來針對不同的目錄給用戶分配不同的權(quán)限的。
如:
[groups]
team1 = manager,staff
表示劃定一個小組,組員有manager和staff用戶
[repository:/baz/fuz]
@team1= rw
* = r
表示team1這個組對資源有讀寫權(quán)限,資源對所有人有讀權(quán)限
[/foo/bar]
manager = rw
* =r
也可以像這樣對個人設(shè)置權(quán)限,manager有讀寫權(quán)限,該資源對所有人有讀權(quán)限
這些可以根據(jù)個人需要修改
五、運行svn服務(wù)器
在安裝的Subversion目錄下有個bin目錄里svnserve.exe,我們直接運行這個文件是無效的。需要在控制臺來啟動他。直接在cmd命令中輸入svnserve -d -r D:\SVN\svnroot這樣服務(wù)就啟動了(注意,這里指定的是svnroot文件即資源根目錄,而不是資源目錄repos)。當(dāng)然你關(guān)閉dos窗口的時候svn服務(wù)也就關(guān)閉了。svn的所有操作都需要在這個服務(wù)器啟動的基礎(chǔ)上進行。但是一直開著這個dos命令窗口很不爽,所以經(jīng)理在這里寫個程序讓他開機自動啟動。
首先我們需要為svnserve創(chuàng)建一個系統(tǒng)服務(wù)。
以經(jīng)理本機的安裝目錄為例,在cmd命令行輸入
sc create SVNServer binpath= "D:\SVN\Subversion\bin\svnserve.exe --service -r D:\SVN\svnroot"
displayname= "SVNServer" depend= Tcpip start= auto
pause
binpath指svnserve.exe的路徑
(注意:如果你的路徑里有空格記得要在binpath的頭尾用轉(zhuǎn)義字符/"把整個個binpath框起來,D:\SVN\svnroot指svn資源庫根目錄)
displayname指服務(wù)名稱
depend指協(xié)議是tcpid
start指開機自動啟動
注意:以上的=后面的一個空格千萬不要丟了
然后我們打開服務(wù)可以看到我們的服務(wù)已經(jīng)是自動啟動了

六、安裝subeclipse插件
打開之前下載的site-1.6.12.zip文件可以看到里面有features、plugins兩個文件夾
用之前我講過的Myeclipse安裝插件的方法安裝就可以了
參考:
(http://www.tkk7.com/zhangyuan/archive/2010/07/28/327371.html)

在這里要注意一點
安裝插件時要去掉features中的org.tigris.subversion.subclipse.mylyn_3.0.0.jar文件
去掉plugins中的org.tigris.subversion.subclipse.core_1.6.8.jar和org.tigris.subversion.subclipse.mylyn_3.0.0.jar
經(jīng)理用Myeclipse8.5配這一套svn如果不刪這些文件的話,啟動Myeclipse時會報錯
這樣SVN就搭建好了..
posted @
2010-07-28 23:27 張元Won 閱讀(31311) |
評論 (13) |
編輯 收藏
我們在用Myeclipse進行開發(fā)的時候會用到很多插件,比如jad、svn、properties等。經(jīng)理最近發(fā)現(xiàn)很多同事安裝問我xx插件怎么安裝,覺得很驚訝,居然不會裝插件。而有的同事會安裝插件,但是安裝的插件很零散,缺乏管理。那么經(jīng)理在這里把安裝插件的方法和大家分享下。
環(huán)境
開發(fā)工具:Myeclipse8.5
JAVA環(huán)境:JDK1.6
操作系統(tǒng):windows7
首先給大家看看經(jīng)理的Myeclipse安裝目錄,經(jīng)理在這個目錄里建了一個myPlugin文件夾專門來管理插件。

我這里以安裝jad的插件為例講解。我們在myPlugin目錄下建立一個jad目錄來存放jad的插件包,在這個目錄下創(chuàng)建features和plugins目錄,并把jad的插件包copy到里面去。

打開Myeclipse的安裝目錄下的dropins文件夾,在此文件夾下創(chuàng)建jad.link文件

在這個文件中寫入剛才配置的myPlugin的jad地址
path=D:\\MyEclipse 8.5\\myPlugin\\jad
注意:這里的反斜杠需要轉(zhuǎn)義,也就是用\\來表示。
這樣配置工作就完成了。
以后我們所有的插件都可以在dropins這個文件夾中來創(chuàng)建對應(yīng)的.link文件鏈接。而所有插件包夜可以在myPlugin目錄中很好的管理起來,這樣不是很好?..
希望以后有好東西還是跟大家一起分享
posted @
2010-07-28 23:25 張元Won 閱讀(32526) |
評論 (13) |
編輯 收藏
昨天跟朋友一起吃飯,他說到兩個Integer類型值比較是否相等的問題。經(jīng)理也在這里把java的Integer值比較的問題拿出來說一說。因為在面試的時候這個是經(jīng)常遇到的問題。
首先給大家看一個例子:
1
public class Test
{
2
3
/** *//**
4
* 關(guān)于Integer大小比較問題
5
* @author 經(jīng)理
6
*/
7
public static void main(String[] args)
{
8
Integer a = 10;
9
Integer b = 10;
10
System.out.println("a==b : " + String.valueOf(a==b));
11
System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12
}
13
}
14
運行一下,在控制臺得到的結(jié)果是這樣的
a==b : true
a.equals(b) : true
當(dāng)是當(dāng)我們變換一下值
1
public class Test
{
2
3
/** *//**
4
* 關(guān)于Integer大小比較問題
5
* @author 經(jīng)理
6
*/
7
public static void main(String[] args)
{
8
Integer a = 1000;
9
Integer b = 1000;
10
System.out.println("a==b : " + String.valueOf(a==b));
11
System.out.println("a.equals(b) : " + String.valueOf(a.equals(b)));
12
}
13
}
運行一下,控制臺的結(jié)果又是
a==b : false
a.equals(b) : true
這是什么原因呢?我當(dāng)時也有點犯糊涂。有點沖動就直接開源碼看了。
實際上在我們用Integer a = 數(shù)字;來賦值的時候Integer這個類是調(diào)用的public static Integer valueOf(int i)這個方法。
1
public static Integer valueOf(int i)
{
2
if(i >= -128 && i <= IntegerCache.high)
3
return IntegerCache.cache[i + 128];
4
else
5
return new Integer(i);
6
}
我們來看看ValueOf(int i)的代碼,可以發(fā)現(xiàn)他對傳入?yún)?shù)i做了一個if判斷。在-128<=i<=127的時候是直接用的int原始數(shù)據(jù)類型,而超出了這個范圍則是new了一個對象。我們知道"=="符號在比較對象的時候是比較的內(nèi)存地址,而對于原始數(shù)據(jù)類型是直接比對的數(shù)據(jù)值。那么這個問題就解決了。
至于為什么用int型的時候值會在-128<=i<=127范圍呢呢?我們知道八位二進制的表示的范圍正好就是-128到127。大概就是因為這吧。
把平時出現(xiàn)的問題記錄下來,自己就可以一點一點進步了。
posted @
2010-07-24 16:03 張元Won 閱讀(24802) |
評論 (12) |
編輯 收藏
JAVA經(jīng)常會有取properties文件的需求,因為一些host、port客戶應(yīng)該能自行修改。所以這些東東應(yīng)該放在一個配置文件中,而不是編譯成class文件。當(dāng)然,這樣的配置文件可以是xml文件也可以是property文件,取的方法也不一樣。經(jīng)理在這里介紹一個經(jīng)常用的方法。
這里寫了一個例子,先給大家看看目錄結(jié)構(gòu)

經(jīng)理是用properties文件來做的,因為這個非常簡單,而且讀取properties文件的速度比讀xml要快的多。
這里的主要文件有兩個:config.properties是配置文件,Test是測試java類
config文件的內(nèi)容就是一個ip一個port

原理很簡單就是首先取得config.properties的二進制流,然后用JAVA封裝好的Properties類把這個流load進來,最后只需要用Properties對象中的getProperty(String key)方法就可以取值了。是不是很簡單。
給大家看看代碼:

我們來運行下結(jié)果:

成功了~
posted @
2010-07-12 11:48 張元Won 閱讀(2586) |
評論 (4) |
編輯 收藏
看了很多Cognos建模概念性的東西,一直被‘維度’這個概念困擾。Cognos把數(shù)據(jù)看成一個立方體,例如:我們把產(chǎn)品、地區(qū)、時間組成一個立方體,那么維度就相當(dāng)于這個立方體的坐標(biāo)軸,各個維度的每個交點上面的值就是量度(即數(shù)據(jù))

這是對模型設(shè)計一個非常重要的概念,因為平面取值的搜索條件是2個,而三圍取值的搜索條件是3個,這樣一來搜索速度會很大程度的提升。
最重要的還不僅僅如此,因為維度還可以分層的,就是說如上圖的例子,時間是可以分為,年、月、日,而產(chǎn)品可以分為產(chǎn)品系列、類型、和品牌產(chǎn)品,地區(qū)也可以分為地域、國家和部門。這樣一來就是一個多維多層級的數(shù)據(jù)模型。

再一個概念就是類別。類別其實是維度多面性的一個體現(xiàn)。他相當(dāng)于是在每一層上又多加了一個拓展,以地區(qū)為例。

那么有了這些概念,我們在建模,不應(yīng)該說是在建立數(shù)據(jù)庫平面模型的時候就應(yīng)該按照這樣的概念去設(shè)計數(shù)據(jù)庫。畢竟兩個平面表就可以組成一個立方體的多維數(shù)據(jù)表,而表中的字段、數(shù)據(jù)可以用層和類的關(guān)系來模擬。真是受益匪淺啊~
posted @
2010-05-26 11:03 張元Won 閱讀(1151) |
評論 (0) |
編輯 收藏