แสดงบทความที่มีป้ายกำกับ Datasource แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Datasource แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 12 กันยายน พ.ศ. 2556

Config Datasource บน JBoss AS7

เราจะต้อง Config JDBC Library ให้มีบน Library ก่อน แล้วถึงจะ Config Datasource อีกทีนึงครับ ผมจะยกตัวอย่างของ Oracle

1. Config JDBC Library ก่อน โดย Config ไว้ที่
  • {JBOSS_HOME}\modules\ แล้วสร้าง Path ของ Library ไว้เช่น com\oracle\ojdbc6\main
  • สร้างไฟล์ module.xml แล้วเอา Jar File มาวางไว้ โดยใน Module.xml ส่วนสี่แดงต้องแก้ไข
    • name คือชื่อส่วน folder path ที่สร้างไว้
    • resource-root คือชื่ือ Jar File ที่เราเอามาวางไว้
 <?xml version="1.0" encoding="UTF-8"?>  
 <module xmlns="urn:jboss:module:1.0" name="com.oracle.ojdbc6">  
  <resources>  
   <resource-root path="ojdbc6.jar"/>  
  </resources>  
  <dependencies>  
           <module name="javax.api" />  
     <module name="javax.transaction.api"/>  
     <module name="javax.servlet.api" optional="true"/>  
  </dependencies>  
 </module>  

2. Config Datasource

  • แก้ไข {JBOSS_HOME}\standalone\configuration\standalone.xml แล้วเพิ่มในส่วนของ Datasource และ Drivers
    • ส่วนสีแดงต้องแก้ไขให้ถูกต้องตามที่ Config ไว้
    • ส่วนสีหน้ำเงินจะต้องตรงกันเพราะ driver จะไป references กับ config driver ข้างล่างที่ตรงสีฟ้าครับ
         <datasource jndi-name="java:jboss/datasources/SampleJPADS" pool-name="SampleJPADS" enabled="true" use-java-context="true">  
           <connection-url>jdbc:oracle:thin:@localhost:1521/TEST</connection-url>  
           <driver>oracle</driver>  
           <security>  
             <user-name>test</user-name>  
             <password>test1234</password>  
           </security>  
         </datasource>  

 <driver name="oracle" module="com.oracle.ojdbc6">  
             <xa-datasource-class>oracle.jdbc.driver.OracleDriver</xa-datasource-class>  
           </driver>  
         </drivers>  

3. แล้วทำการ Restart Server ก็จะใช้งาน Datasource ได้แล้วครับ โดยเรียกจาก jndi-name จากตัวอย่าง java:jboss/datasources/SampleJPADS

4. เราสามารถดู Log Start Server ได้ว่าใช้งานได้รึยัง ตามนี้ ครับ
[org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) JBAS010400: Bound data source [java:jboss/datasources/SampleJPADS]

วันศุกร์ที่ 2 พฤษภาคม พ.ศ. 2551

Path Log ของ XA Datasource

Path จะอยู๋ประมาณนี้น่ะครับ จะอยู๋ใน tranlog น่ะครับในแต่ละ Profiles ซึ่งสาเหตุที่เราไปลบเพราะว่า บางทีWebsphere จะมี Log Error ค้างอยู่ใน Server ซึ่งที่ผมเห็นจะเกิดจาก XA Datasource น่ะครับ แล้วมันจะค้างตลอดใน Server เราเลยต้องตามไปลบ ไม่งั้นมันก็จะขึ้นตลอดน่ะครับ


จะขึ้นประมาณข้างล่างนี้น่ะครับ
[5/2/08 15:51:43:720 ICT] 00000050 RegisteredRes E WTRN0063E: An illegal attempt to commit a one phase capable resource with existing two phase capable resources has occurred.
[5/2/08 15:51:43:723 ICT] 00000050 RegisteredRes E WTRN0086I: XAException encountered during prepare phase for transaction 00000119A8D46B1C000000010004EC456280C5DF303AAF4EFAC6AC2CC0E8082A1BD2474A00000119A8D46B1C000000010004EC456280C5DF303AAF4EFAC6AC2CC0E8082A1BD2474A00000001. Local resources follow.
[5/2/08 15:51:43:725 ICT] 00000050 RegisteredRes E WTRN0089I: XATransactionWrapper@ cdc2b3 XAResource: com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@1539da0 enlisted: true mcWrapper.hashCode()31227578: Vote: commit.

วิธีแก้ว่าไม่สามารถใช้ Datasource ที่สร้างใหม่ได้

คือเวลาสร้างเสร็จแล้วลอง Test Connection แล้วไม่สามารถที่จะ Test ผ่านน่ะครับ จะขึ้นประมาณว่า
invalid arguments in callDSRA0010E: SQL State = null, Error Code = 17,433
แบบนี้ ผมได้ข้อมูลตามลิงค์ข้างล่างน่ะครับ

เหตุผลจากคุณ Ken Hygh
1) the application isn't closing connections and is thus 'leaking' them.
2) the database doesn't have enough 'listeners' for the number of
connections you're trying to open. This generally happens in a clustered
environment, where the database must support #Connections x #Servers.
3) there's a database call that's taking a very long time, and
eventually every configured connection gets into this call and until one
completes, no other threads can get a connection.

วิธีแก้ง่าย ก็ Restart Server นั้นครับ ก็จะใช้งานได้เลย

Reference
http://www.ibm.com/developerworks/forums/message.jspa?messageID=13762630

วันศุกร์ที่ 9 พฤศจิกายน พ.ศ. 2550

การเรียก Datasource ของ Websphere จาก Java Application

วิธีการเรียกที่ผมเห็นทำได้ 2 แบบน่ะครับ แต่มีแบบนึงไม่แน่ใจว่าเป็นปัญหาของ Websphere หรือเปล่า
ที่ผมลองลองกับ Websphere 6.0, Websphere 6.1 ครับ ควรจะทำบน RAD นะครับ ถึงจะรันได้
1. เรียกโดยใช้ Library ของ Websphere เลยซึ่งวิธีนี้จะอ้าง JNDI Name ได้ตรงๆ เลยครับ

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere .naming.WsnInitialContextFactory"); // เป็นตัวที่เราใช้ในการเรียก Context ซึ่ง Library จะอยู่ที่ lib ใน RAD น่ะครับ
env.put(Context.PROVIDER_URL, "iiop://localhost:2809/");// IP Address ของ JNDI Name ตัวที่เราเรียก ซึ่งเราสามารถดู Port ได้ที่ Servers --> Application Server แล้วเลือก Server ที่เรามี JDBC อยู่ เสร็จแล้วดู Port (Communications) ว่า BOOTSTRAP_ADDRESS เป็นอันไหนก็ใช้อันนั้นครับ
InitialContext ctx = new InitialContext(env);
DataSource ds = (DataSource) ctx.lookup("jdbc/test");//ชื่อ JNDI Name ที่เราใช้เรียกครับ


2. จะคล้ายวิธีแรกแต่เราใช้ Context มาตรฐานของ Sun เลย (วิธีนี้ผมลองเรียกแล้วมันได้ค่าเป็น NULL น่ะครับ ม่รู้เพราะอะไรเหมือนกัน)

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi .cosnaming.CNCtxFactory"); // เป็นตัวที่เราใช้ในการเรียก Context ซึ่งจะเป็นของ Sun เลย
env.put(Context.PROVIDER_URL, "iiop://localhost:2809/");// IP Address ของ JNDI Name ตัวที่เราเรียก ซึ่งเราสามารถดู Port ได้ที่ Servers --> Application Server แล้วเลือก Server ที่เรามี JDBC อยู่ เสร็จแล้วดู Port (Communications) ว่า BOOTSTRAP_ADDRESS เป็นอันไหนก็ใช้อันนั้นครับ
InitialContext ctx = new InitialContext(env);
DataSource ds = (DataSource) ctx.lookup("cell/nodes/Node01/servers/server1/jdbc/test"); //ชื่อที่ใช้เรียกจะต่างกับเรียกโดยใช้ของ Websphere โดยเราจะต้องทำการใส่ cell/nodes/<ชื่อ Node>/servers/<ชื่อ Server>/

ปล.
1. ต้องใช้ JRE On Websphere กับ Websphere Runtime ด้วยน่ะครับ
2. ถ้าไปเรียกที่ Server อาจจะต้องดูว่า Server เปิดให้เรียกใช้หรือเปล่าน่ะครับ แต่ถ้าเทสเครื่องตัวเองคืดว่าไม่น่าจะมีปัญหาอะไรครับ

Reference
http://www.webservertalk.com/archive80-2006-4-1481822.html