posted by 구름너머 2007. 3. 27. 09:32

http://www.skview.co.kr/upload/blding/영등포0.jpg



영등포 SK LEADERS' VIEW
2 월말 공사진행 현황
Year | 2004
123456789101112
Year | 2005
123456789101112
Year | 2006
123456789101112
Year | 2007
123456789101112
사진을 누르시면 큰 이미지를 보실 수 있습니다.
이 공사는 2004년 04월 착공하여, 2007년 08월 준공 예정 입니다.
2월말 현재 공정율이 81%로 순조롭게 공사가 진행 중입니다.
공사진행율81%
2월 실적

■ 건축공사	  1. 고층부	    - 외장판넬공사 완료    - 내장공사 : 도배공사, 도장공사, 붙박이 가구문짝설치  2. 상가(근린생활시설)  	    - 외벽 석공사 (1층 마무리) 	    - 창호 및 유리설치공사 (1층)    - 외부계단 금속공사  3. 주차장 - 지상1층 바닥방수■ 기전공사	  - 기계실 공조,위생,가스,소방,자동제어 배관  - 지하1층 오배수 횡주관설치, 지하3층 집수정 펌프설치  - CGV 및 운동시설 공조실 덕트설치  - 5층 운동시설 SP배관, 판매시설 SP배관 잔손보기  - 오피스텔 환기유닛 설치  - ELEV. 1~3,5~7 호기 홀 버튼류 취부  - ELEV. 1~2,9~10 호기 외장공사  - 오피스텔 세대분전반 배선기구 취부, EPS 계량기함 설치  - B3~3F 소방배관 입선, MCC반입                                   

'상가' 카테고리의 다른 글

부천-소풍 상가  (0) 2007.04.25
안정적인 임대계약, 네 가지 노하우  (0) 2007.03.27
사무실.상가.빌딩 통합과세 추진  (0) 2007.03.08
대출금리 변동 3월부터 SMS 통지  (0) 2007.02.21
상가 양도세에 대하여  (0) 2007.02.20
posted by 구름너머 2007. 3. 23. 09:13

기존 WL6.1에서는

oracle.sql.CLOB

사용하였으나

WL81에서는

How helpful was this Support Pattern? Rating: Comments:


WebLogic Server
Support Pattern
More Support Patterns
CLOB/BLOB Data Type Handling Issues

Problem Description

WebLogic Server versions that support the JDBC 2.0 specification support the use of BLOB (Binary Large Object) and CLOB (Character Large Object) data types. These data types were made available with the release of Oracle version 8 and above. Sybase and MS SQL Server, databases do not natively support these data types, however certain Sybase and SQL Server drivers (for example Datadirect) provide both read and write support for BLOB/CLOB data types for Sybase and MS SQL Server. Users face many problems when they use incorrect programming techniques with the above data types. Also, changes in the database driver APIs when migrating from one WebLogic Server version to another leads to incompatible code. A number of cases related to these issues have been raised.


Problem Troubleshooting

This pattern provides some common methodologies that can be followed to troubleshoot CLOB/BLOB problems using Oracle database.


Quick Links:


Why Does the Problem Occur?


Recommended Programming Techniques

Many times due to incorrect programming techniques customers face problems while inserting or retrieving CLOB/BLOB objects from the database. The CLOB/BLOB data insertion and retrieval happens differently with Oracle and WebLogic database drivers.


WLS 8.1:

Standard Programming Technique to insert, update and retrieve rows with Clob/Blob using WebLogic and Oracle drivers are mentioned below.


How to Insert/Update BLOB Data types

Oracle Driver

To access the BEA supported methods, the BLOB object java.sql.Blob needs to be typecast to weblogic.jdbc.vendor.oracle.OracleThinBlob interface. Sample programming is shown below.


java.sql Objects Initialization


PreparedStatement pstmtInsert = null;
PreparedStatement pstmtSelect = null;
java.sql.Blob myRegularBlob = null;
java.io.OutputStream os = null;
Connection myConnect = null;

BLOB Field Initialization

When you first insert a row containing a BLOB data type, you must insert the row with an "empty" BLOB before the field can be updated with real data. You can insert an empty BLOB with the Oracle EMPTY_BLOB() function.


myConnect = getConnection();
String insertSQL = "insert into myBlobTable values (?, EMPTY_BLOB())";
pstmtInsert = myConnect.prepareStatement(insertSQL);
pstmtInsert.setString(1, String.valueOf(i));
pstmtInsert.executeUpdate();

Write to BLOB Field

In the following try catch block, you get the BLOB locator and access the Oracle BLOB extension for writing.


try
{
// get our BLOB locator..
String selectSQL="select pk, myBlobColumn from myBlobTable where pk=? for update";
pstmtSelect = myConnect.prepareStatement(selectSQL);
pstmtSelect.setString(1, String.valueOf(i));
rs = pstmtSelect.executeQuery();
while (rs.next())
{
System.out.println("PK for update is " + rs.getString("PK"));
myRegularBlob = rs.getBlob("myBlobColumn");
}
// Access the underlying Oracle extension functionality for
// writing. Cast to the OracleThinBlob interface to access
// the Oracle method.
os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();
os.write(bytes);
os.flush();

} catch (SQLException sqe) { System.out.println("ERROR(general SQE): " +
sqe.getMessage());
}

WebLogic Driver

Since the WebLogic driver uses WebLogic wrapper classes, no typecasting is required when using this driver. If typecasting is used, ClassCastException will be thrown


The actual exception that occurs is on the line


“os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();"

is


ava.lang.ClassCastException: weblogic.jdbc.rmi.SerialOracleBlob_weblogic_jdbc_rmi_internal_OracleTBlobStub_weblogic_jdbc_rmi_ internal_
OracleTBlobImpl_weblogic_jdbc_wrapper_Blob_weblogic_jdbc_base_BaseBlob_814_WLStub

To resolve this issue, the above code needs to be modified.


Replace


os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();

with

os = myRegularBlob.setBinaryStream(1);

Top of Page


How to Read BLOB Data Types

The following code snippet depicts how to correctly read a BLOB data type for both Oracle and WebLogic drivers.


try{
myConnect = getConnection();
String selectSQL = "select myBlobColumn from myTable1 where pk = ?";
pstmtSelect = myConnect.prepareStatement(selectSQL);
pstmtSelect.setString(1, String.valueOf(i));
ResultSet rs = null;
byte[] inBytes = new byte[256];
rs = pstmtSelect.executeQuery();
while (rs.next())
{
myRegularBlob = rs.getBlob("myBlobColumn");
java.io.InputStream readis = myRegularBlob.getBinaryStream();
for (int k=0 ; k < 256 ; k++) {
inBytes[k] = (byte) readis.read();
System.out.println("output [" + k + "] = " + inBytes[k]);
}
} catch (SQLException sqe) { System.out.println("ERROR(general SQE): " + sqe.getMessage()); }

Top of Page


How to Insert/Update CLOB Data Types


Oracle Driver


Initializing a CLOB Field

The code is very similar to the BLOB example.


Replace


String insertSQL = "insert into myBlobTable values (?, EMPTY_BLOB())";

With

String insertSQL = "insert into myClobTable values (?, EMPTY_CLOB())";

In the try catch block, you get the CLOB locator and access the Oracle CLOB extension as follows using the same procedure as BLOB. getClob method is used instead of getBlob and getAsciiOutputStream instead of getBinaryOutputStream.


An example is shown below.


Replace


os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();

With

os = ((OracleThinClob)myRegularClob).getAsciiOutputStream();

WebLogic Driver

The code is very similar to the BLOB example with some changes to avoid a ClassCastException, as shown below.


Replace


os = ((OracleThinClob)myRegularClob).getAsciiOutputStream();

With

os = myRegularClob.setAsciiStream(1);

Top of Page


How to Read Clob Data Types

The procedure is the same as the BLOB example, except that you need to use getClob instead of getBlob and getAsciiStream instead of getBinaryStream.


WLS 7.0 and WLS 6.1:

The implementation of the BLOB and CLOB APIs in WLS 8.1 also works in WLS 7.0 and WLS 6.1.


Top of Page


When and How to Use the API (weblogic.jdbc.common.OracleBlob) or the API (weblogic.jdbc.vendor.oracle.OracleThinBlob):

The earlier versions of WLS always went through the RMI interface, even if local. This was changed due to customer complaints and because it significantly improved performance to avoid RMI whenever possible. Now you get different behaviors depending on whether or not your code is in an RMI client or on the server, and by service pack, and by what driver you are using.


To access the BEA supported methods you need to typecast java.sql.Blob either to the weblogic.jdbc.vendor.oracle.OracleThinBlob as in WLS 8.1 example or the weblogic.jdbc.common.OracleBlob interface.


You need code something like this:


java.io.OutputStream getOS(java.sql.Blob lob) throws SQLException {

if (lob instanceof oracle.sql.BLOB) {
// Oracle thin/oci driver non-rmi
return ((oracle.sql.BLOB)lob).getBinaryOutputStream();
}

else if (lob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob) {
// Oracle thin/oci driver via rmi
return ((weblogic.jdbc.vendor.oracle.OracleThinBlob)lob).getBinaryOutputStream();
}

else if (lob instanceof weblogic.jdbc.common.OracleBlob) {
// WebLogic Type 2 Driver for Oracle
return ((weblogic.jdbc.common.OracleBlob) lob).getBinaryOutputStream();
}

else {
// New Weblogic type 4 driver for Oracle or any non-Oracle driver
return ((java.sql.Blob) lob).setBinaryStream(1);
}
}

Your code can be smaller if you don't use the full variety of drivers.


Note that as in WLS 8.1 in case of WebLogic Type 4 drivers, you don't need to use the Oracle extension getBinaryOutputStream(). You can use the standard setBinaryStream(1). In general, if you can avoid using an extension, do so.


Clarification:

WLS 6.1 SP5 was the service pack that returned an oracle.sql.BLOB, which was inconsistent with earlier versions of WLS 6.1. This was changed in WLS 6.1 SP6.


With the exception of WLS 5.1 (which is End-of-life as of 2/1/2004) and WLS 6.1 SP5 (which was an error), you will always get weblogic.jdbc.vendor.oracle.OracleThinBlob when going through WLS.


To get oracle.sql.BLOB, you need to use connections directly.


The reasons are different for various releases/service packs.


<>WLS 6.1,WLS 6.1 SP1-SP4, WLS 7.0, WLS 7.0 SP1-SP2 - going through RMI

WLS 6.1 SP6+, WLS 7.0 SP3+ - consistency with earlier service packs


WLS 8.1 - dynamic wrappers only work with interfaces, not classes, and there is no interface for oracle.sql.BLOB.


This discussion also applies to CLOB usage.


Top of Page


Migrating Applications Due To WebLogic Server Upgrade

When migrating applications from WebLogic Server 5.1 to WebLogic Server 6.1 or to WebLogic Server 7.0 and using Oracle 8.1.7 as the database server, the following problem appears while accessing CLOB/BLOB data types.


In WebLogic Server 5.1 the sample code shown below obtains a return object of type oracle.sql.BLOB.


try {
// get our BLOB locator…
String selectSQL = "select pk, myBlobColumn from myTable1 where pk=? for update";
pstmtSelect = myConnect.prepareStatement(selectSQL);
pstmtSelect.setString(1, String.valueOf(i));
rs = pstmtSelect.executeQuery();
while (rs.next())
{
myRegularBlob = rs.getBlob("myBlobColumn");
}
// WLS 5.1-type code where we type-casted the database returned Blob object
// to oracle.sql.BLOB
os = ((oracle.sql.BLOB)myRegularBlob).getBinaryOutputStream();
os.write(bytes);
os.flush();
myConnect.commit();

When the same code is migrated to WLS 6.1 or to WLS 7.0 you receive a ClassCastException. The actual exception on the line


“os = ((oracle.sql.BLOB)myRegularBlob).getBinaryOutputStream();”

is

java.lang.ClassCastException: weblogic.jdbc.rmi.SerialOracleBlob

Using Oracle objects resulted in problems and so wrappers were added back in WLS 6.1. This URL is a link to the documentation that explains the correct way to access the BLOB object, http://e-docs.bea.com/wls/docs70/oracle/advanced.html#1158571.


In summary, change the cast from oracle.sql.BLOB to weblogic.jdbc.common.OracleBlob and all should work.


Similar to BLOBs, with CLOBs you will get the same ClassCastException (java.lang.ClassCastException: weblogic.jdbc.rmi.SerialOracleClob) if the following typecast is used:


os = ((oracle.sql.CLOB)myRegularClob).getAsciiOutputStream();

To avoid the ClassCastException, the above line of code should be replaced with


os = ((weblogic.jdbc.common.OracleClob)myRegularClob).getAsciiOutputStream();

Reading CLOBs is exactly same way as BLOBs.


Top of Page


Database Driver

Another cause of the CLOB/BLOB problem could be a JDBC driver problem. In order to isolate whether the problem is a driver problem or WebLogic connection pool problem, you may try the following if you have a reproducible test case.


  1. Get connection from the driver directly.
    In your test case, get JDBC connections directly from the driver and bypass WebLogic datasource. Use the application code snippet to insert/update/retrieve/delete records from database containing CLOB/BLOB columns. Sample code to create a Byte array to use as CLOB/BLOB data to write to database is as follows:

//Creating Blob to write
byte[] bytes = new byte[256];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = 1;
}

  1. Use reflection to find out the actual class name and hierarchy of the BLOB/CLOB object returned from the database. Use sample code as follows:

System.out.println("The Blob classname is " + myRegularBlob.getClass());
Class[] classes = myRegularBlob.getClass().getInterfaces();
System.out.println("The Class has " + classes.length + " interfaces" );
for (int m = 0; m < classes.length; m++)
{
Class intrface = classes[m];
System.out.println("An interface is " + intrface.toString());
}
System.out.println("The superclass is " +
myRegularBlob.getClass().getSuperclass().toString());
System.out.println("The superclass of that is " +
myRegularBlob.getClass().getSuperclass().getSuperclass().toString());

You will get a typical response as follows:


The Blob classname is class weblogic.jdbc.rmi.SerialOracleBlob_weblogic_jdbc_rmi_internal_
OracleTBlobStub_weblogic_jdbc_rmi_internal_OracleTBlobImpl_weblogic_jdbc_wrapper_Blob_oracle_sql_BLOB_814_WLStub
The Class has 6 interfaces
An interface is interface java.io.Serializable
An interface is interface weblogic.utils.wrapper.Wrapper
An interface is interface weblogic.rmi.extensions.server.StubDelegateInfo
An interface is interface weblogic.rmi.internal.StubInfoIntf
An interface is interface weblogic.jdbc.rmi.internal.OracleTBlobImpl_weblogic_jdbc_wrapper_Blob_oracle_sql_BLOB_RemoteInterface
An interface is interface weblogic.jdbc.rmi.internal.OracleTBlob
The superclass is class weblogic.jdbc.rmi.SerialOracleBlob
The superclass of that is class weblogic.jdbc.wrapper.JDBCWrapperImpl

The next step is to investigate the classes involved and check their APIs to find out why the exception is occurring.


  1. Try different JDBC drivers. You may try a JDBC driver from a different vendor or an updated version of driver to see whether the problem still occurs. You may use metadata to verify that a correct driver is used. Sample code is like this:

DatabaseMetaData dmd = myConnect.getMetaData();
System.out.println("JDBC Driver Name is " + dmd.getDriverName());
System.out.println("JDBC Driver Version is " + dmd.getDriverVersion());

Top of Page


Known WebLogic Server Issues

You can periodically review the Release Notes for your version of WLS for more information on Known Issues or Resolved Issues in Service Packs and browse for JDBC-related issues. For your convenience, see the following:

In this section we will examine some known WebLogic Server problems that involve CLOB/BLOB data types.

  1. WLS (ALL) - Currently, Container Managed Persistence does not support the java.sql.Blob data type. The primary reason for this appears to be due to the lack of a standard facility for updating BLOBs. Alternatives include using:
    1. LONG_RAW data type instead of a BLOB data type
    2. Bean Managed Persistence (BMP) and writing proprietary JDBC code to update the BLOB.
  2. WLS (ALL) - If you use a prepared statement to update a CLOB and the new value is shorter than the previous value, the CLOB will retain the characters that were not specifically replaced during the update. For example, if the current value of a CLOB is abcdefghij and you update the CLOB using a prepared statement with zxyw, the value in the CLOB is updated to zxywefghij. To correct the values updated with a prepared statement, you should use the dbms_lob.trim procedure to remove the excess characters left after the update. See the Oracle documentation for more information about the dbms_lob.trim procedure. Here is a link that contains sample code on how to use trim:
    http://www.cs.umb.edu/cs634/ora9idocs/appdev.920/a96591/adl03prg.htm
  3. WLS 8.1 SP2 - Except for DB2 UDB 8.1, CLOB data types are limited to 32K characters because of DRDA listener limitations.
  4. WLS 8.1 SP2 - The WebLogic Type 4 JDBC drivers allow PreparedStatement.setXXX and ResultSet.getXXX methods on BLOB/CLOB data types, in addition to what is described in the JDBC specification. The supported conversions are generally the same as those for LONGVARBINARY/LONGVARCHAR, except where limited by database support.
  5. WLS (ALL) - BLOBs and CLOBs in Oracle behave differently than other data types in regards to transactional boundaries (statements issued before an SQL commit or rollback statement) in that a BLOB or CLOB will become inactive as soon as a transaction is committed. If AutoCommit is set to TRUE, the transaction will be automatically committed after each command issued on the connection, including SELECT statements. For this reason you will need to set AutoCommit to false if you need to have a BLOB or CLOB available across multiple SQL statements. You will then need to manually commit (or rollback) the transactions at the appropriate time.
    To set AutoCommit to false, use the following line of code:
    conn.setAutoCommit(false); // where conn is our connection object
  6. WLS 6.1 - When using a non-transaction-enabled DataSource, a "java.sql.SQLException: ORA-01002" error will occur when creating a CMP entity EJB which has a field mapped to Oracle CLOB/BLOB.
    The EJB container inserts a row which has CLOB/BLOB columns as follows:
    1. Insert into the table initializing the LOB using EMPTY_BLOB() or EMPTY_CLOB().
    2. Retrieve the LOB locator using select for update statement.
    3. Modify the LOB.
    Although the connection from a non-transaction-enabled DataSource is in auto-commit mode, Oracle LOB locators that are used to write cannot span the transactions. So the transaction is closed at step 1 and then ORA-1002 occurs at step 2.
    Workaround:
    You need to use a transactional DataSource (TxDataSource) when using Oracle CLOB/BLOB with CMP.
  7. WLS 6.x - You cannot use BLOBs and CLOBs when using the RMI driver in conjunction with the WebLogic jDriver for Oracle. BLOBs and CLOBs are not serializable and therefore are not supported with the JDBC RMI Driver used with WebLogic Server 6.x.


Top of Page


Known Oracle Thin Driver Issue

The 9.2.0.1 and 9.2.0.2 versions of the Oracle Thin driver do not allow you to work with a CLOB in tables that also contain a long. When you retrieve a CLOB from the table and call clob.length(), you will get a SQL protocol violation.


Workaround: In this scenario, you can read the LONG column before calling clob.length().


This issue is fixed in version 9.2.0.3 and 10G.


Need Further Help?

If you have followed the pattern, but still require additional help, you can:

If this does not resolve your issue and you have a valid Support Contract, you can open a Support Case by logging in at: http://support.bea.com/


Top of Page


External Resources

Search for known oracle bugs with CLOBs and BLOBs at:

https://metalink.oracle.com/metalink/plsql/ml2_gui.startup


Feedback

Click Support Pattern Feedback to rate this Support Pattern and comment on such things as:

  • Were you successful in solving your issue with this pattern?
  • Was there any additional information that could be included in this pattern that would help solve your issue.
  • What other Support patterns would you like to see developed?

DISCLAIMER NOTICE:

BEA Systems, Inc. provides the technical tips and patches on this Website for your use under the terms of BEA's maintenance and support agreement with you. While you may use this information and code in connection with software you have licensed from BEA, BEA makes no warranty of any kind, express or implied, regarding the technical tips and patches.


Any trademarks referenced in this document are the property of their respective owners. Consult your product manuals for complete trademark information.



'JAVA' 카테고리의 다른 글

가비지 컬렉션, Garbage Collection  (0) 2008.03.03
디자인 패턴  (0) 2007.10.09
자바 강좌 링크  (0) 2007.03.13
데이터베이스 프로그래밍에서 기본적으로 지켜야할 사항  (0) 2007.01.12
MarshalException  (0) 2006.10.19
posted by 구름너머 2007. 3. 16. 19:02

3/15 외과의사 봉달희 18회 다시보기 3월15일자

외과의사 봉달희 18회 다시보기 3월15일자

1부


외과의사 봉달희 18회 다시보기 3월15일자

2부


외과의사 봉달희 18회 다시보기 3월15일자

3부


외과의사 봉달희 18회 다시보기 3월15일자

4부


'아무거나방' 카테고리의 다른 글

불붙은 공짜 휴대폰 전쟁 점입가경  (0) 2007.04.11
휴대폰 문자 스펨 주의!  (0) 2007.04.02
외과의사 봉달희 17회  (0) 2007.03.15
뮤직비디오 My all-Mariah Carey  (0) 2007.03.14
봉달희 16회  (0) 2007.03.09
posted by 구름너머 2007. 3. 15. 12:34

외과의사 봉달희 17회 다시보기 3월14일자

1부


외과의사 봉달희 17회 다시보기 3월14일자

2부


외과의사 봉달희 17회 다시보기 3월14일자

3부


외과의사 봉달희 17회 다시보기 3월14일자

4부


'아무거나방' 카테고리의 다른 글

휴대폰 문자 스펨 주의!  (0) 2007.04.02
외과의사 봉달희 18회-마지막회  (0) 2007.03.16
뮤직비디오 My all-Mariah Carey  (0) 2007.03.14
봉달희 16회  (0) 2007.03.09
봉달희 15회  (0) 2007.03.08
posted by 구름너머 2007. 3. 14. 13:31

'아무거나방' 카테고리의 다른 글

외과의사 봉달희 18회-마지막회  (0) 2007.03.16
외과의사 봉달희 17회  (0) 2007.03.15
봉달희 16회  (0) 2007.03.09
봉달희 15회  (0) 2007.03.08
엄마품 맴도는 ''헬리콥터 보이'' 는다  (0) 2007.03.06
WEB
posted by 구름너머 2007. 3. 13. 14:12

15. 자바 프로젝트

역사적인 이유로 인해, 자바 프로젝트는 java.apache.org와 jakarta.apache.org 양쪽에서 찾아볼 수 있다. 결과적으로 시간이 지나면 모든 자바 프로젝트들은 자카르타 쪽으로 옮겨 가게 될 것이다.

자카르타 프로젝트의 결론은 열려 있고 공동으로 개발되는 자바 플랫폼 기반의 상업적인 수준의 서버 솔루션을 공급하는 것이다.

아파치 커뮤니티에서의 자바는 양적인 면과 질적인 면 모두에서 매우 동적이고 활기찬 것이다.

15.1. 앤트(Ant)

Ant는 make에 대한 자바 환경이라고 생각할 수 있다.이것은 자바 관련 프로젝트들과 함께 큰 성공을 거두고 있다. 개발자들은 셸 명령 대신에 자바를 사용할 수 있다. 이것은, 공용성과 실행가능성의 증가를 뜻한다. Makefile 대신 Ant는 XML 파일을 사용한다. ANT에 관해 더 알기를 원한다면 이곳을 방문해보자.

관련된 이야기

  • F19: 자바 코드를 빌드하는데 사용하는 Ant

15.2. ORO 와 Regexp

ORO은 자바를 지원하는 정규식을 공급하는 완성된 패키지이다. 이것은 Perl 5의 정규식을 지원하고 뭉쳐진 표현들과 그 밖의 것들을 지원한다. 이것들 모두는 아파치 라이센스 하에 있다. 당신은 ORO에 관해 이곳에서 정보를 얻을 수 있다. 당신은 또 다른 가벼운 정규식 패키지인 Regexp도 입수할 수 있다.

15.3. 슬라이드

슬라이드는 고수준의 컨텐츠 관리 도구이다. 이것은 제멋대로 놓여 있거나 혹은 외생의 것이서나, 정리된 데이터일 수도 있는 바이너리 컨텐츠에 있어 계층적으로 공급할 수 있다. 추가적으로 슬라이드는 락과 버전 서비스를 통해 보안의 측면에도 도움이 된다.

당신이 만약 WedDAV를 이용하고 있다면, 슬라이드는 그것을 확장적으로 사용할 수 있다. 간단히 말하면, 슬라이드는 단일된, 단순한 방법으로 리소스와 정보에 접근할 수 있도록 하는 것이다. 또한 데이터베이스나 파일 시스템 등등에서 사용할 수 있으며, WebDAV 환경 혹은 슬라이드 자체 API 중 원하는 쪽으로 접근할 수 있다.

당신은 슬라이드 홈페이지에서 더 많은 것을 배울 수 있다.

15.4. Struts

Struts는 웹 개발을 위해 Model-View-Controller(MVC)의 디자인 패러다임을 적용하려 하는 아파치 프로젝트이다. 이것은 서블릿자바 서버 페이지(JSP) 기술로 빌드된다. 모델이 되는 부분은 어플리케이션의 내부적인 상황을 보여주는 자바 서버 오브젝트이다. 엔터프라이즈 자바 빈즈는 종종 여기에 사용된다. 보여지는 부분은 정적인 HTML/XML과 Java로 이루어진 JavaServer Pages (JSP)이다. JSP는 개발자들에게 그들이 정의한 새로운 태그를 사용하는 것을 허용한다. 콘트롤러 부분은 클라이언트로부터 받은 요청(GET/POST)을 처리하는 서블릿으로 구성되어있고 모델위에서 적절한 JSP를 제공하여 뷰를 갱신한다. Struts 프로젝트 페이지에서 더 많은 정보를 얻을 수 있다. .

15.5. 태그 라이브러리

자바 서버 페이지 기술은 개발자들에게 자신들의 태그를 기능적으로 추가하는 것을 허용하고 있다. 태그 라이브러리 프로젝트는 공통적인 표현들을 정리하는 것이으로,SQL 데이터베이스 접근에 사용되는 등의, 공통된 유틸리티들은 위한 태그들을 포함하고 있다.(date같은)

태그 라이브러리에 대하여 더 많이 알고 싶다면 이곳을 방문하여 보라. 패키지 안에 더 많은 문서를 포함하고 있다.

15.6. Tomcat

Tomcat는 자카르타 프로젝트의 중요 프로젝트이다. 이 것은 자바 서블릿 2.2와 자바서버페이지(JSP) 1.1기술들의 공식 참조 구현이다.

Tomcat 홈페이지에서 더 많은 것을 알수 있다.Tomcat 프로젝트는 Sun Microsystems로부터 코드를 기증받아서 시작되었다.

15.7. Velocity

Velocity는 자바 기반의 템플릿 엔진이다. 이는 소스코드, HTML, 리포트등을 만들기 위한 단독 유틸로 사용할 수도 있고 템플릿 서비스를 제공하기 위해 다른 시스템과 연동 될 수도 있다. Velocity는 자바 코드와 HTML 템플릿을 분리하기 위한 Model View Controller 패러다임을 가지고 있다.

Velocity에 대하여 더 알고 싶다면 이곳을 방문하라. 15.18절같은 다른 프로젝트의 일부이다

15.8. Watchdog

watchdog프로젝트는 서블릿과 자바서버페이지(JSP) 명세서를 위한 검증 시험을 제공한다. 더 많은 정보는 이곳에서 볼 수 있다.

15.9. JServ

Apache JServ는 현 시점에서 유지중이다. 이는 새로운 공식 릴리즈가 없을 것이라는 것을 의미한다 단지 요청된 패치를 시험하고 있다. 새로운 기능은 추가되지 않는다. 자바 서블릿 엔진이나 자바서버페이지(JSP)에 관한 최근의 구현을 찾고자 한다면 자카르타 프로젝트에서 가능한 Java 15.6절을 사용할 것을 고려해야 한다.

15.10. JSSI

JSSI는 자바로 구현한 SSI이다. SSI는 클라이언트에 페이지가 보내지기 전에 처리해야 할 것을 파일에 포함한 태그이다.예를 들면 현재 시간같은 것이다. 더 많은 정보는 이곳에서 확인할 수 있다.

15.11. Apache JMeter

Apache JMeter는 기능적인 행동이나 성능을 측정하기 위해 디자인된 100% 순수 자바로 작성된 데스크탑 프로그램입니다. 원래는 웹 프로그램을 시험하기위해 작성되었으나 지금은 함수들을 시험하는 것으로 확장되었습니다.

이 것은 정적,동적 리소스를 시험하거나 즉각적인 가시적 피드백을 얻는데 사용할 수 있다.

이곳에서 스크린샷과 많은 공부거리를 볼수 있다.

15.12. Server Pages Foundation Classes

SPFC는 서버기반 프로그램 개발시 일반적인 문제를 해결하기 위한 라이브러리 셋트이다.다음의 두 가지의 사안에 관심을 가진다.

  • HTML과 Java의 혼합: HTML 코드를 생성하거나 자바 코드와 통합될수 있는 클래스 라이브러리를 제공한다.

  • HTTP는 비연결성 프로토콜이다:SPFC는 세션기능을 제공해서 웹사이트를 여행한 사용자의 기록을 유지할수 있다. 프로그램 개발자는 페이지 생성에 대하여 특별히 세부사항을 걱정할 필요가 없다. 더 많은 보편적인 응용프로그램 관례에 대하여 생각할 수 있다. SPFC를 더 알고 싶으면 이곳 에 가면 알수 있다.(역자주: 번역당시 위 URL은 삭제된 뒤였다.)

15.13. Element Construction Set

Element Construction Set (ECS)는 JAVA API이며 다양한 마크업 언어를 위한 요소를 생성한다.HTML 4.0과 XML을 직접지원한다. 그러나 임의의 마크업 언어를 위한 태그를 만들도록 확장할 수 있다.

HTML과 자바 코드를 혼합한 깔끔한 해결을 이끌도록 자바 함수 호출을 이용하여 마크업 태그를 생성하는 것을 허용한다. ECS project page에서 더 많은 것을 배울 수 있다. (역자주: 이 주소는 http://jakarta.apache.org/ecs/index.html로 변경되었다.)

15.14. Avalon

펄이나 BSD시스템에 익숙하다면 아발론은 CPAN나 자바-아파치 기술의 Ports 모음과 동등하다. 일반 소스 저장소를 위한 가이드라인을 제공하지 않는다.게다가 한가지 단계만 있다: 이는 자바로 작성된 서버 응용프로그램을 위한 일반적인 프레임워크를 작성, 디자인, 발전, 유지하기위한 노력이다. 이는 서버측 자바 프로젝트들을 통합하고 각각을 만드는것을 쉽게 하는 의미를 제공한다.

15.15. JAMES (Java Apache Mail Enterprise Server)

다른 아파치 서버측 기술의 총체로서 JAMES는 현재 가능한 프로토콜(SMTP,POP3,IMAP,HTTP)에 기반한 완벽하고 포터블한 기업형 메일 엔진 솔루션으로 디자인된 100% 순수 자바서버이다.

더 많은 정보가 필요하면 이 곳을 방문하라.

15.16. PicoServer

순수 자바로 작성된 경량급 HTTP/1.0 서버. 프로젝트는 중단된것처럼 보이고 가능한 소스도 없다. 웹 사이트와 CVS는 사용할 수 없다.

15.17. Jetspeed

Jetspeed는 자바로 작성된 web기반 포탈이다. 서로 다른 자료 소스(XML, SMTP, iCalendar)를 집합하는 것을 허용하는 모듈 API를 가지고 있다.

관련된 이야기:

  • TH11: JetSpeed를 이용한 엔터프라이즈 정보를 작성하기

15.18. Turbine

Turbine은 실험적인 자바 개발자들이 빠르게 보안 웹 응용프로그램을 작성하는 것을 허용한다.. Turbine은 자바 실행코드를 실행할 플랫폼 재사용 가능한 컴포넌트, 아파치 라이선스하에 있는 모든 것을 함께 가져온다. 포함된 다음의 특성들:

  • 템플릿 시스템으로의 통합

  • MVC 형식 개발

  • 접근제어리스트

  • 지역화 제공

  • 등등...

관심있는 사람은 Turbine 홈페이지를 방문할 수 있다.

15.19. Jyve

Jyve projectturbine을 기반을 작성되었다. 이것은 web 기반 FAQ 시스템을 제공하는 프로그램이다.

15.20. Alexandria

Alexandria는 통합문서관리시스템이다. CVS나 JavaDoc같은 오픈 소스 프로젝트에 공통적인 기술을 가져온다. 최종 목표는 코드 문서화와 공유를 촉진하기 위해 소스 코드와 문서의 통합이다. 더 많은 정보는 이곳에서 볼 수 있다. (역자주:이 주소는 http://jakarta.apache.org/alexandria/index.html로 변경되었다.

관련된 이야기:

  • W06:Alexandria의 소개

15.21. Log4j

이 패키지는 자바 응용프로그램이 사용할 수 있는 로깅 프레임워크를 제공한다. 이는 바이너리를 변경하지 않고 실행시에 가능하게 할 수 있다. 또한 성능을 위해 설계되었다. in mind. 이것에 관한 내용은 http://jakarta.apache.org/log4j/docs/index.html에서 찾을 수 있다.

'WEB' 카테고리의 다른 글

AJAX 관련  (0) 2007.05.28
Ruby and AJAX  (0) 2007.04.27
XML to PDF  (1) 2007.03.12
LDAP기술과 표준화 동향  (0) 2007.01.05
IE7.0 한국어버전 정식버전, 11월 14일 국내 공개  (0) 2006.11.09
posted by 구름너머 2007. 3. 13. 14:11

16. XML 프로젝트들

Apache XML 프로젝트사이트에 있으며 목적은 아래와 같다:

  • 열린 협동적인 양식으로 개발하기 위한 상업적 능력의 표준 기반 XML 솔루션을 제공하기 위하여

  • IETF나 W3C같은 표준에 대하여 구현전망으로부터 피드백을 제공하기 위해.

  • 아파치 프로젝트안에서 XML관련 활동의 초점이 되기 위해서

이 프로젝트의 홈페이지는 http://xml.apache.org에 있다. 이는 각각의 서브프로젝트를 위한 포괄체이다.

16.1. XML의 소개

이는 XML의 빠른 소개이다. XML에 대하여 더 많이 알고 싶다면 XML 홈페이지에서 시작하라. XML은 태그와 속성을 사용하여 구조화된 객체를 설명하는 마크업 언어이다(HTML을 생각하라) 내용은 가시화와는 분리되어있지만 디스플레이 방식(셀폰,HTML,텍스트)을 선택하거나 변경할 수 있다. XML표준은 단지 태그와 속성이 정렬되는 방법을 설명한 것이지 의미하는 이름을 설명한 것은 아니다. 아파치(그룹)에서는 아래의 절에 설명된 도구들을 제공한다.

16.2. Xerces

Xerces프로젝트는 자바, C, 펄을 포함하는 다양한 언어를 위한 XML파서를 제공한다. 펄 바인딩은 C++소스에 기반한다. Xerces의 TCL 바인딩은 Steve Ball이 만든TclXML 의 2.0버전에 있다. SourceForge 프로젝트 페이지를 통해서 가능하다. XML파서는 XML 문서를 표제 접근하는 데 사용하는 도구이다. 아래는 Xerces에 의해 제공되는 표준들에 대한 설명이다:

  • DOM: DOM이란 문서기반모델(Document Object Model)을 의미한다. XML문서들은 중첩된 태그들에 의해 계층적인 구조로 되어있다. XML문서들은 나무구조 비슷한 인터페이스로 접근할수 있다. 처리과정은 아래와 같다.

    • 문서 분석

    • 구조 작성

    • 노드 추가/삭제/변경

    • 구조 정렬

  • SAX:XML을 위한 단순 API. 이는 스트림기반의 API이다. 이는 계산된(encountered) 요소들로부터 콜백을 얻을수 있다는 것을 의미하며 이 콜백들은 예를 들어 DOM 트리를 생성하는데 사용할 수 있다.

  • XML 주소공간

  • XML Schema: XML 표준은 문서를 작성하는 신텍스를 제공한다. XML Schema는 XML 문서(semantics)의 contents를 정의하기 위한 도구를 제공한다. 이는 문서안에서 특정요소가 10과 20사이의 정수이이여야 한다고 정의하는 것을 허용한다.

Xerces XML 프로젝트의 초기 코드는 IBM에서 제안되었다. 이에대한 자세한 정보는 Xerces Java,Xerces Cand Xerces Perl홈페이지에서 찾을수있다.

16.3. Xalan

Xalan은 Java나 C++을 위한 XSLT 파서이다. XSL은 XML을 위한 스타일시트언어이다.여기서 T는 변환을 의미한다. XML은 구조적인 자료(정보)를 저장하는데 좋다. 때때로 이 자료를 사용자에게 표시하거나 다른 변환을 적용할 필요가 있다. Xalan은 원본 XML문서를 받아서 스타일시트를 이용한 변환정보를 읽은 후 HTML, 보통 텍스트나 또다른 XML 문서로 출력한다. Xalan에 대해서Xalan Java and Xalan C++프로젝트 홈에서 더 많은 것을 공부할수 있다..

16.4. FOP

웹사이트 에서, FOP는 형식화된 객체 트리를 읽고 이를 PDF문서로 변환하는 자바 프로그램이다.. 그래서 FOP는 Xalan이 HTML이나 텍스트를 이용하여서 하는 것과 비슷한 방법으로, XML문서를 읽고 PDF를 출력한다. FOP에 대해서는 이곳에서 더 자세히 알수 있다.

16.5. Cocoon

Cocoon은 이해가능한 출판물을 제공하기 위해 Xerces, Xalan과 FOP같은 다른 아파치 XML 기술들에 효력이 있다. 웹사이트에 설명한대로 내용과 로직과 표현방식을 분리한다:

  • XML 생성: XML 파일은 내용 소유자에 의해 만들어진다. XML 컨텐트는 특별히 선택된 DTD/namespace 보다는 오히려 처리하는데 특별한 지식을 요구하지 않는다. 이 계층은 항상 사람에 의하여 보통의 텍스트 편집기나 XML관련 도구/편집기를 이용하여 직접 수행된다.

  • XML 처리 발생기:논리적인 부분은 내용 파일과 분리되어있다.

  • XSL 변역: 만들어진 문서는 XSL 스타일시트를 적용하거나 특별한 형식(HTML, PDF, XML, WML, XHTML)로 형태화함으로서 변역된다.

cocoon에 대하여 더 알고 싶다면 Coon 홈페이지를 방문하라.

16.6. Xang

Xang프로젝트의 목적은 개발자들이 웹을 위한 상업적 성능을 가진 XML관련 응용프로그램을 만들기 쉽게 만드는데 있다. 프로그램 구조는 자바스크립트같은 것으로 쓰여진 계층적인 XML파일안에 정의되어있다. 이 파일은 (XML 파일, 자바 플러그인등등이 될 수 있는) 자료를 접근하는 방법을 정의한다. Xang 엔진은 HTTP 요청들을 적절한 취급자(핸들러)로의 사상을 처리한다. Xang에 대하여 자세히 알고 싶다면프로젝트 홈페이지를 방문하라.

16.7. SOAP

아파치 SOAP(단순 객체 접근 규약)은 W3C에 제출된SOAP submission의 구현이다. 이 것은 IBM의 SOAP4J의 구현에 기반하며 대체한다..

W3C 초벌 명세서에 의하면: SOAP는 분산 환경에서 정보의 교환을 위한 경량급 규약이다. 이 것은 다음의 세부분으로 구성된 XML 기반 규약이다.:

  • 메시지 표현방법과 처리방법을 위한 하부 구조를 정의한 구조,

  • 프로그램에 정의된 자료형의 객체를 표현하는 번역규칙 집합,

  • 그리고 원격 프로세스 호출과 응답을 나타내기 위한 규정.

SOAP는 XML기반 원격 프로시저 호출이나 CORBA 시스템을 생각할 수 있다. 이것은 HTTP와 XML기반이다. 이것은 다른시스템과 비교하는게 더 자세하고 느리다는 것을 의미한다. 다시 말해서 대부분의 언어는 HTTP와 XML을 위한 모듈을 가지고 있기 때문에 다양한 언어(C, Java, Perl, Python, Tcl, etc.)를 위한 클라이언트와 서버의 개발을 상호운영하거나 디버깅하는 것을 쉽게 한다. 더 많은 것을 배우려면아파치 SOAP 홈페이지을 방문하라.

관련된 이야기

  • W02: Rub-a-dub-dub-dubya: SOAP and the Web

16.8. Batik

Batik은 다양한 목적(보기,생성, 변형)을 위해서 Scalable Vector Graphics (SVG)에서 이미지를 사용하기 원하는 응용프로그램을 위한 자바기반 도구모음이다.

이는 XML 중심이고 W3C 명세서에 따른다. 그래픽관련 구성요소를 제공하여 다른 아파치 프로젝트와는 다른 전형적이 아니다. Batik는 사용자 태그를 통해 하부구조를 확장하는 고리를 제공하고 SVG로부터 JPEG나 PNG같은 다른 형식으로 변환하는 것을 허용한다.

Batik 홈페이지

관련된 이야기

  • W14: Batik 프로젝트 소개

16.9. Crimson

Crimson은 다양한 인터페이스를 통한 XML 1.0을 지원하는 선택적이고 자바 기반의 XML 파서입니다. 이 것은 Sun 프로젝트에 포함되어있는 파서이며 Xerces 2가 발표되기 전까지 임시 단계입니다.

Crimson 홈페이지

관련된 이야기

  • TH08: XML을 처리하는 자바 API(JAXP) 1.1

16.10. 다른 XML 프로젝트

아파치 XML 그룹하에 있지 않는 아파치와 XML 기반의 프로젝트 들이 있다.

  • mod_xslt.이것은 XML/XSL기반 문서를 전송하는 C기반의 모듈이다. 또한 GPL라이선스를 따른다.

  • AxKit는 mod_perl and Apache를 위한 XML기반의 응용서버이다.이는 컨텐트와 표현의 분리를 허용한다.

관련된 이야기

  • TH04: AxKit - 아파치를 위한 XML 문서 서버

'UNIX' 카테고리의 다른 글

[TIP]네트워크 연결진단법  (0) 2007.09.12
ps와 grep과 awt의 만남  (0) 2007.08.17
exec와 system  (0) 2007.03.05
crontab에 등록이 되었는데 실행이 안되는경우?  (0) 2007.02.14
gdb  (0) 2007.02.12
posted by 구름너머 2007. 3. 13. 13:50

'JAVA' 카테고리의 다른 글

디자인 패턴  (0) 2007.10.09
WL81에서 BLOB 사용법  (0) 2007.03.23
데이터베이스 프로그래밍에서 기본적으로 지켜야할 사항  (0) 2007.01.12
MarshalException  (0) 2006.10.19
Code Convention : jsp page 작성 요령  (0) 2006.07.21