- 設定IIS:
至 IIS 管理員中 -> 點選安裝了 Tomcat ISAPI 的網站 -> 點選"內容" -> 選擇"主目錄"這個頁籤 -> 按下"設定" -> 選擇"選項"頁籤 -> 取消"啟用作業狀態"這個項目. - 修改 ISAPI 所讀取的 workers.properties 檔:
- 加入以下的內容:
worker.loadbalancer.sticky_session=1 worker.Tomcat1.socket_keepalive=1 worker.Tomcat2.socket_keepalive=1
- mark lbfactor:
#worker.Tomcat1.lbfactor=1
#worker.Tomcat2.lbfactor=2
- 加入以下的內容:
2006/12/04
[Java]Tomcat與IIS的sticky session設定
2006/12/01
[Java]Tomcat與Resin的ISAPI NLB設定
- Tomcat: (以 /jsp-examples 為例)
- workers.properties 的內容如下:
#定一個名為 loadbalancer 的 worker, 並將 type 定為 lb(load-balancing)
worker.list = loadbalancer
worker.loadbalancer.type = lb
#設定 loadbalancer 底下的 workers (ex:Tomcat1, Tomcat2)
worker.loadbalancer.balanced_workers = Tomcat1,Tomcat2
#將 Tomcat1 與 Tomcat2 這兩個 worker 的 type 定為 ajp13
worker.Tomcat1.type=ajp13
worker.Tomcat2.type=ajp13
#分別設定 Tomcat1 與 Tomcat2 的 IP, ajp13 的 Port 以及 load-balancing 的 factor
#ajp13 的 Port 值可在 Tomcat 的 server.xml 中找到並修改
# lbfactor 的值越大,表示該 Server 的 loading 越重
worker.Tomcat1.host=192.168.1.10
worker.Tomcat1.port=8009
worker.Tomcat1.lbfactor=1
worker.Tomcat2.host=192.168.1.20
worker.Tomcat2.port=7009
worker.Tomcat2.lbfactor=2
#設定要導至 Tomcat 的 URI
worker.remote.mount=/jsp-examples /jsp-examples/*
- workers.properties 的內容如下:
2006/09/05
[Java]在Sun WebServer中透過IIOP使用Sun AppServer的EJB
環境設定: $SunApp 為 Sun AppServer 安裝目錄, $SunWeb 為 Sun WebServer 安裝目錄
- 將 $SunApp\lib\j2ee.jar 與 appserv-rt.jar 複製至 $SunWeb\bin\https\jar 目錄中.
- 修改 $sunWeb\https-[computername]\config\server.xml, 將 $SunWeb\bin\https\jar\j2ee.jar 與 $SunWeb\bin\https\jar\appserv-rt.jar 加至 server 的 classpath.
2006/09/04
[Java]在jTds中使用MS950編碼
- 在 http://jtds.sourceforge.net/ 中下載jTds這一套JDBC Driver.
- 將 jar 檔 (ex:jtds-1.2.jar) 解開.
- 在 net\sourceforge\jtds\jdbc 目錄中編輯 Charsets.properties 檔
- 在編碼清單中加入一行: MS950=2|MS950, 編輯後儲存
- 將目錄再包裝成 jtds-1.2.jar 即可
2006/08/25
[C#]用PerformanceCounter讀取MSMQ中的訊息數量
using System.Diagnostics; using System; namespace ReadMSMQ { class Program { static void Main(string[] args) { //只要改第一與第三個參數, [hostname]\private$\[queuename] PerformanceCounter objCounter1 = new PerformanceCounter("MSMQ Queue", "Messages in Queue", @"testHost\private$\testQueue"); Console.WriteLine(objCounter1.NextValue().ToString()); //查出MSMQ中, 每個Queue的Messages數量, 可用下面的方式 PerformanceCounterCategory objCategory = new PerformanceCounterCategory("MSMQ Queue"); PerformanceCounter objCounter2 = new PerformanceCounter("MSMQ Queue", "Messages in Queue"); foreach (string strInstanceName in objCategory.GetInstanceNames()) { objCounter2.InstanceName = strInstanceName; Console.Write(strInstanceName + " = " + objCounter2.NextValue().ToString()); } } } }
[Sun AppServer]建立Sun AppServer與NodeAgent的Windows服務
使用Windows的sc.exe來完成Windows服務的建立.
- 建立一個 Sun Java System Application Server 的 Windows 服務.
C:\WINDOWS\system32\sc.exe create sun_domain1 binPath= "C:\Sun\ApplicationServer\lib\appservService.exe \"C:\Sun\ApplicationServer\bin\asadmin.bat start-domain --user admin --passwordfile C:\Sun\ApplicationServer\password.txt domain1\" \"C:\Sun\ApplicationServer\bin\asadmin.bat stop-domain domain1\"" DisplayName= "SUNONE AppServer domain1"- 若執行成功, 會出現 "[SC] CreateService 成功" 的訊息.
此 Windows 服務的顯示名稱為"SUNONE AppServer domain1", 服務名稱為 "sun_domain1".
若要刪除此 Windows 服務, 可用以下的指令:
C:\WINDOWS\system32\sc.exe delete sun_domain1
- 若執行成功, 會出現 "[SC] CreateService 成功" 的訊息.
[VirtualPC]解決PAE Error的方法
將 boot.ini 中的 [operating systems] 改為
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS = "Microsoft Windows XP Professional" /fastdetect /execute /NOPAE
[Sun AppServer]Tomcat透過IIOP使用Sun AppServer的EJB
前置作業:
- 將 Sun AppServer 安裝目錄中的 lib\j2ee.jar 與 lib\appserv-rt.jar 分別放至 Tomcat 安裝目錄中的 common\lib 與 shared\lib 下
- 在 Web 專案中, 將 EJB Module 部署至 Sun AppServer 後產生的 xxxClient.jar 檔加入 WEB-INF\lib 中
[Java]讀取MS Access資料
//設定Connection的URL String filepath = "./test.mdb"; String url = "jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb);DBQ=" + filepath; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //取得Access的Connection Connection objAccessConnection = DriverManager.getConnection(url); DatabaseMetaData objMeta = objAccessConnection.getMetaData(); //取得Access的Table Schema ResultSet objTables = objMeta.getTables(null, null, null, new String[]{"TABLE"}); //取得Access中的所有表格 while (objTables.next()) { //表格名稱 String strTableName = objTables.getString("TABLE_NAME"); //查詢的SQL句 String strQuerySql = "SELECT * FROM " + strTableName; //查詢用的Statement Statement objAccessStatement = objAccessConnection.createStatement(); //取得資料集 ResultSet objData = objAccessStatement.executeQuery(strQuerySql); }
[Sun AppServer]建立sybase的ConnectionPool
以 Sybase 的 jConnect-6_0 為例:
- 將 jConnect-6_0 的 jar 檔 (jconn3.jar & jTDS3.jar) 複製到 $sunap\lib 下
- 建立 JDBC Connection Pool 的資料如下:
Datasource Classname: com.sybase.jdbc3.jdbc.SybDataSource
Properties:
databaseName: 資料庫名稱
serverName: 資料庫的主機名
PortNumber: 資料庫的 port (Ex: 5000)
User: 連線的使用者帳號
Password: 連線的使用者密碼
charset: 語系 (Ex: big5,utf-8)
[SQLServer2000]查出資料庫各表格的資訊
SELECT sysusers.name + N'.' + sysobjects.name as ObjectName, sysindexes.name as IndexName, sysindexes.rows, --資料列 case indid when 1 then 1 else 0 end as IsClusteredIndex, sysindexes.indid, --索引的識別碼 sysobjects.name, --物件名稱 sysusers.name --使用者名稱或群組名稱在資料庫中是唯一的 FROM sysusers, sysobjects, sysindexes WHERE sysusers.uid = sysobjects.uid and sysindexes.id = sysobjects.id and sysobjects.name not like '#%' and OBJECTPROPERTY(sysobjects.id, N'IsMSShipped') <> 1 and OBJECTPROPERTY(sysobjects.id, N'IsSystemTable') = 0 ORDER BY ObjectName, IsClusteredIndex DESC, indexproperty(sysindexes.id, sysindexes.name, N'IsStatistics'), IndexName
[C# & Java]GET/POST資料
[C#]
- GET:
//設定GET資料 Uri t_uri = new Uri("http://localhost/Test/Get.asp?id=yilin"); HttpWebRequest t_req = System.Net.WebRequest.Create(t_uri) as HttpWebRequest; t_req.Method = "GET"; //取得回應的內容 System.Net.WebResponse t_resp = t_req.GetResponse(); System.IO.StreamReader t_stream = new System.IO.StreamReader(t_resp.GetResponseStream()); Console.WriteLine(t_stream.ReadToEnd().Trim());
- POST:
string t_url = "http://localhost/Test/Post.asp"; string t_post = "id=yilin&password=helloworld"; //將POST資料轉成byte array byte[] t_bytdata = Encoding.UTF8.GetBytes(t_post); WebRequest t_req = WebRequest.Create(t_url); //設定POST資料 t_req.ContentType = "application/x-www-form-urlencoded"; t_req.Method = "POST"; Stream t_ws = t_req.GetRequestStream(); t_ws.Write(t_bytdata, 0, t_bytdata.Length); t_ws.Close();
[C#]在程式中模擬特定的windows帳號存取網路芳鄰
using System; using System.IO; using System.Runtime.InteropServices; using System.Security.Principal; using System.Security.Permissions; [assembly: SecurityPermissionAttribute(SecurityAction.RequestMinimum, UnmanagedCode = true)] [assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")] namespace ConsoleApplication1 { class Class1 { //登入 [DllImport("advapi32.dll", SetLastError = true)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); //登出 [DllImport("kernel32.dll")] public extern static bool CloseHandle(IntPtr hToken); public Class1() { string UserName = "username"; string MachineName = "192.168.0.10"; string Pw = "password"; string IPath = @"\\" + MachineName + @"\shared"; const int LOGON32_PROVIDER_DEFAULT = 0; const int LOGON32_LOGON_NEW_CREDENTIALS = 9; IntPtr tokenHandle = new IntPtr(0); tokenHandle = IntPtr.Zero; //將登入的Token放在tokenHandle bool returnValue = LogonUser(UserName, MachineName, Pw, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle); //讓程式模擬登入的使用者 WindowsIdentity w = new WindowsIdentity(tokenHandle); w.Impersonate(); if (false == returnValue) { //登入失敗的處理 return; } //取得該目錄下的所有檔案名稱 DirectoryInfo dir = new DirectoryInfo(IPath); FileInfo[] inf = dir.GetFiles(); for (int i = 0; i < inf.Length; i++) { Console.WriteLine(inf[i].Name); } } } }附註
- 如果電腦存在於網域, LogonUser的第二個參數須用網域名:
LogonUser(UserName, "myDomain", Pw,LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
- 相關參考網頁: http://www.thecodeproject.com/csharp/cpimpersonation1.asp
訂閱:
文章 (Atom)