http://www.skview.co.kr/upload/blding/영등포0.jpg
|
'상가' 카테고리의 다른 글
부천-소풍 상가 (0) | 2007.04.25 |
---|---|
안정적인 임대계약, 네 가지 노하우 (0) | 2007.03.27 |
사무실.상가.빌딩 통합과세 추진 (0) | 2007.03.08 |
대출금리 변동 3월부터 SMS 통지 (0) | 2007.02.21 |
상가 양도세에 대하여 (0) | 2007.02.20 |
http://www.skview.co.kr/upload/blding/영등포0.jpg
|
부천-소풍 상가 (0) | 2007.04.25 |
---|---|
안정적인 임대계약, 네 가지 노하우 (0) | 2007.03.27 |
사무실.상가.빌딩 통합과세 추진 (0) | 2007.03.08 |
대출금리 변동 3월부터 SMS 통지 (0) | 2007.02.21 |
상가 양도세에 대하여 (0) | 2007.02.20 |
기존 WL6.1에서는
oracle.sql.CLOB
사용하였으나
WL81에서는
![]() | WebLogic Server Support Pattern |
More Support Patterns |
CLOB/BLOB Data Type Handling Issues |
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.
This pattern provides some common methodologies that can be followed to troubleshoot CLOB/BLOB problems using Oracle database.
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.
Standard Programming Technique to insert, update and retrieve rows with Clob/Blob using WebLogic and Oracle drivers are mentioned below.
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.
PreparedStatement pstmtInsert = null; PreparedStatement pstmtSelect = null; java.sql.Blob myRegularBlob = null; java.io.OutputStream os = null; Connection myConnect = null; |
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(); |
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()); } |
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); |
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()); } |
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(); |
The code is very similar to the BLOB example with some changes to avoid a ClassCastException, as shown below.
Replace
os = ((OracleThinClob)myRegularClob).getAsciiOutputStream(); |
os = myRegularClob.setAsciiStream(1); |
The procedure is the same as the BLOB example, except that you need to use getClob
instead of getBlob
and getAsciiStream
instead of getBinaryStream
.
The implementation of the BLOB and CLOB APIs in WLS 8.1 also works in WLS 7.0 and WLS 6.1.
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.
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.
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.
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.
//Creating Blob to write byte[] bytes = new byte[256]; for (int i = 0; i < bytes.length; i++) { bytes[i] = 1; } |
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.
DatabaseMetaData dmd = myConnect.getMetaData(); System.out.println("JDBC Driver Name is " + dmd.getDriverName()); System.out.println("JDBC Driver Version is " + dmd.getDriverVersion()); |
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.
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: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. conn.setAutoCommit(false);
// where conn is our connection object 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.
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/
Search for known oracle bugs with CLOBs and BLOBs at:
https://metalink.oracle.com/metalink/plsql/ml2_gui.startup
FeedbackClick Support Pattern Feedback to rate this Support Pattern and comment on such things as:
|
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. |
가비지 컬렉션, Garbage Collection (0) | 2008.03.03 |
---|---|
디자인 패턴 (0) | 2007.10.09 |
자바 강좌 링크 (0) | 2007.03.13 |
데이터베이스 프로그래밍에서 기본적으로 지켜야할 사항 (0) | 2007.01.12 |
MarshalException (0) | 2006.10.19 |
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 |
외과의사 봉달희 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 |
외과의사 봉달희 18회-마지막회 (0) | 2007.03.16 |
---|---|
외과의사 봉달희 17회 (0) | 2007.03.15 |
봉달희 16회 (0) | 2007.03.09 |
봉달희 15회 (0) | 2007.03.08 |
엄마품 맴도는 ''헬리콥터 보이'' 는다 (0) | 2007.03.06 |
역사적인 이유로 인해, 자바 프로젝트는 java.apache.org와 jakarta.apache.org 양쪽에서 찾아볼 수 있다. 결과적으로 시간이 지나면 모든 자바 프로젝트들은 자카르타 쪽으로 옮겨 가게 될 것이다.
자카르타 프로젝트의 결론은 열려 있고 공동으로 개발되는 자바 플랫폼 기반의 상업적인 수준의 서버 솔루션을 공급하는 것이다.
아파치 커뮤니티에서의 자바는 양적인 면과 질적인 면 모두에서 매우 동적이고 활기찬 것이다.
Ant는 make에 대한 자바 환경이라고 생각할 수 있다.이것은 자바 관련 프로젝트들과 함께 큰 성공을 거두고 있다. 개발자들은 셸 명령 대신에 자바를 사용할 수 있다. 이것은, 공용성과 실행가능성의 증가를 뜻한다. Makefile 대신 Ant는 XML 파일을 사용한다. ANT에 관해 더 알기를 원한다면 이곳을 방문해보자.
관련된 이야기
F19: 자바 코드를 빌드하는데 사용하는 Ant
ORO은 자바를 지원하는 정규식을 공급하는 완성된 패키지이다. 이것은 Perl 5의 정규식을 지원하고 뭉쳐진 표현들과 그 밖의 것들을 지원한다. 이것들 모두는 아파치 라이센스 하에 있다. 당신은 ORO에 관해 이곳에서 정보를 얻을 수 있다. 당신은 또 다른 가벼운 정규식 패키지인 Regexp도 입수할 수 있다.
슬라이드는 고수준의 컨텐츠 관리 도구이다. 이것은 제멋대로 놓여 있거나 혹은 외생의 것이서나, 정리된 데이터일 수도 있는 바이너리 컨텐츠에 있어 계층적으로 공급할 수 있다. 추가적으로 슬라이드는 락과 버전 서비스를 통해 보안의 측면에도 도움이 된다.
당신이 만약 WedDAV를 이용하고 있다면, 슬라이드는 그것을 확장적으로 사용할 수 있다. 간단히 말하면, 슬라이드는 단일된, 단순한 방법으로 리소스와 정보에 접근할 수 있도록 하는 것이다. 또한 데이터베이스나 파일 시스템 등등에서 사용할 수 있으며, WebDAV 환경 혹은 슬라이드 자체 API 중 원하는 쪽으로 접근할 수 있다.
당신은 슬라이드 홈페이지에서 더 많은 것을 배울 수 있다.
Struts는 웹 개발을 위해 Model-View-Controller(MVC)의 디자인 패러다임을 적용하려 하는 아파치 프로젝트이다. 이것은 서블릿과 자바 서버 페이지(JSP) 기술로 빌드된다. 모델이 되는 부분은 어플리케이션의 내부적인 상황을 보여주는 자바 서버 오브젝트이다. 엔터프라이즈 자바 빈즈는 종종 여기에 사용된다. 보여지는 부분은 정적인 HTML/XML과 Java로 이루어진 JavaServer Pages (JSP)이다. JSP는 개발자들에게 그들이 정의한 새로운 태그를 사용하는 것을 허용한다. 콘트롤러 부분은 클라이언트로부터 받은 요청(GET/POST)을 처리하는 서블릿으로 구성되어있고 모델위에서 적절한 JSP를 제공하여 뷰를 갱신한다. Struts 프로젝트 페이지에서 더 많은 정보를 얻을 수 있다. .
자바 서버 페이지 기술은 개발자들에게 자신들의 태그를 기능적으로 추가하는 것을 허용하고 있다. 태그 라이브러리 프로젝트는 공통적인 표현들을 정리하는 것이으로,SQL 데이터베이스 접근에 사용되는 등의, 공통된 유틸리티들은 위한 태그들을 포함하고 있다.(date같은)
태그 라이브러리에 대하여 더 많이 알고 싶다면 이곳을 방문하여 보라. 패키지 안에 더 많은 문서를 포함하고 있다.
Tomcat는 자카르타 프로젝트의 중요 프로젝트이다. 이 것은 자바 서블릿 2.2와 자바서버페이지(JSP) 1.1기술들의 공식 참조 구현이다.
Tomcat 홈페이지에서 더 많은 것을 알수 있다.Tomcat 프로젝트는 Sun Microsystems로부터 코드를 기증받아서 시작되었다.
Velocity는 자바 기반의 템플릿 엔진이다. 이는 소스코드, HTML, 리포트등을 만들기 위한 단독 유틸로 사용할 수도 있고 템플릿 서비스를 제공하기 위해 다른 시스템과 연동 될 수도 있다. Velocity는 자바 코드와 HTML 템플릿을 분리하기 위한 Model View Controller 패러다임을 가지고 있다.
watchdog프로젝트는 서블릿과 자바서버페이지(JSP) 명세서를 위한 검증 시험을 제공한다. 더 많은 정보는 이곳에서 볼 수 있다.
Apache JServ는 현 시점에서 유지중이다. 이는 새로운 공식 릴리즈가 없을 것이라는 것을 의미한다 단지 요청된 패치를 시험하고 있다. 새로운 기능은 추가되지 않는다. 자바 서블릿 엔진이나 자바서버페이지(JSP)에 관한 최근의 구현을 찾고자 한다면 자카르타 프로젝트에서 가능한 Java 15.6절을 사용할 것을 고려해야 한다.
JSSI는 자바로 구현한 SSI이다. SSI는 클라이언트에 페이지가 보내지기 전에 처리해야 할 것을 파일에 포함한 태그이다.예를 들면 현재 시간같은 것이다. 더 많은 정보는 이곳에서 확인할 수 있다.
Apache JMeter는 기능적인 행동이나 성능을 측정하기 위해 디자인된 100% 순수 자바로 작성된 데스크탑 프로그램입니다. 원래는 웹 프로그램을 시험하기위해 작성되었으나 지금은 함수들을 시험하는 것으로 확장되었습니다.
이 것은 정적,동적 리소스를 시험하거나 즉각적인 가시적 피드백을 얻는데 사용할 수 있다.
이곳에서 스크린샷과 많은 공부거리를 볼수 있다.
SPFC는 서버기반 프로그램 개발시 일반적인 문제를 해결하기 위한 라이브러리 셋트이다.다음의 두 가지의 사안에 관심을 가진다.
HTML과 Java의 혼합: HTML 코드를 생성하거나 자바 코드와 통합될수 있는 클래스 라이브러리를 제공한다.
HTTP는 비연결성 프로토콜이다:SPFC는 세션기능을 제공해서 웹사이트를 여행한 사용자의 기록을 유지할수 있다. 프로그램 개발자는 페이지 생성에 대하여 특별히 세부사항을 걱정할 필요가 없다. 더 많은 보편적인 응용프로그램 관례에 대하여 생각할 수 있다. SPFC를 더 알고 싶으면 이곳 에 가면 알수 있다.(역자주: 번역당시 위 URL은 삭제된 뒤였다.)
Element Construction Set (ECS)는 JAVA API이며 다양한 마크업 언어를 위한 요소를 생성한다.HTML 4.0과 XML을 직접지원한다. 그러나 임의의 마크업 언어를 위한 태그를 만들도록 확장할 수 있다.
HTML과 자바 코드를 혼합한 깔끔한 해결을 이끌도록 자바 함수 호출을 이용하여 마크업 태그를 생성하는 것을 허용한다. ECS project page에서 더 많은 것을 배울 수 있다. (역자주: 이 주소는 http://jakarta.apache.org/ecs/index.html로 변경되었다.)
펄이나 BSD시스템에 익숙하다면 아발론은 CPAN나 자바-아파치 기술의 Ports 모음과 동등하다. 일반 소스 저장소를 위한 가이드라인을 제공하지 않는다.게다가 한가지 단계만 있다: 이는 자바로 작성된 서버 응용프로그램을 위한 일반적인 프레임워크를 작성, 디자인, 발전, 유지하기위한 노력이다. 이는 서버측 자바 프로젝트들을 통합하고 각각을 만드는것을 쉽게 하는 의미를 제공한다.
다른 아파치 서버측 기술의 총체로서 JAMES는 현재 가능한 프로토콜(SMTP,POP3,IMAP,HTTP)에 기반한 완벽하고 포터블한 기업형 메일 엔진 솔루션으로 디자인된 100% 순수 자바서버이다.
더 많은 정보가 필요하면 이 곳을 방문하라.
순수 자바로 작성된 경량급 HTTP/1.0 서버. 프로젝트는 중단된것처럼 보이고 가능한 소스도 없다. 웹 사이트와 CVS는 사용할 수 없다.
Jetspeed는 자바로 작성된 web기반 포탈이다. 서로 다른 자료 소스(XML, SMTP, iCalendar)를 집합하는 것을 허용하는 모듈 API를 가지고 있다.
관련된 이야기:
TH11: JetSpeed를 이용한 엔터프라이즈 정보를 작성하기
Turbine은 실험적인 자바 개발자들이 빠르게 보안 웹 응용프로그램을 작성하는 것을 허용한다.. Turbine은 자바 실행코드를 실행할 플랫폼과 재사용 가능한 컴포넌트, 아파치 라이선스하에 있는 모든 것을 함께 가져온다. 포함된 다음의 특성들:
템플릿 시스템으로의 통합
MVC 형식 개발
접근제어리스트
지역화 제공
등등...
Jyve projectturbine을 기반을 작성되었다. 이것은 web 기반 FAQ 시스템을 제공하는 프로그램이다.
Alexandria는 통합문서관리시스템이다. CVS나 JavaDoc같은 오픈 소스 프로젝트에 공통적인 기술을 가져온다. 최종 목표는 코드 문서화와 공유를 촉진하기 위해 소스 코드와 문서의 통합이다. 더 많은 정보는 이곳에서 볼 수 있다. (역자주:이 주소는 http://jakarta.apache.org/alexandria/index.html로 변경되었다.
관련된 이야기:
W06:Alexandria의 소개
이 패키지는 자바 응용프로그램이 사용할 수 있는 로깅 프레임워크를 제공한다. 이는 바이너리를 변경하지 않고 실행시에 가능하게 할 수 있다. 또한 성능을 위해 설계되었다. in mind. 이것에 관한 내용은 http://jakarta.apache.org/log4j/docs/index.html에서 찾을 수 있다.
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 |
Apache XML 프로젝트사이트에 있으며 목적은 아래와 같다:
열린 협동적인 양식으로 개발하기 위한 상업적 능력의 표준 기반 XML 솔루션을 제공하기 위하여
IETF나 W3C같은 표준에 대하여 구현전망으로부터 피드백을 제공하기 위해.
아파치 프로젝트안에서 XML관련 활동의 초점이 되기 위해서
이 프로젝트의 홈페이지는 http://xml.apache.org에 있다. 이는 각각의 서브프로젝트를 위한 포괄체이다.
이는 XML의 빠른 소개이다. XML에 대하여 더 많이 알고 싶다면 XML 홈페이지에서 시작하라. XML은 태그와 속성을 사용하여 구조화된 객체를 설명하는 마크업 언어이다(HTML을 생각하라) 내용은 가시화와는 분리되어있지만 디스플레이 방식(셀폰,HTML,텍스트)을 선택하거나 변경할 수 있다. XML표준은 단지 태그와 속성이 정렬되는 방법을 설명한 것이지 의미하는 이름을 설명한 것은 아니다. 아파치(그룹)에서는 아래의 절에 설명된 도구들을 제공한다.
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 Schema: XML 표준은 문서를 작성하는 신텍스를 제공한다. XML Schema는 XML 문서(semantics)의 contents를 정의하기 위한 도구를 제공한다. 이는 문서안에서 특정요소가 10과 20사이의 정수이이여야 한다고 정의하는 것을 허용한다.
Xalan은 Java나 C++을 위한 XSLT 파서이다. XSL은 XML을 위한 스타일시트언어이다.여기서 T는 변환을 의미한다. XML은 구조적인 자료(정보)를 저장하는데 좋다. 때때로 이 자료를 사용자에게 표시하거나 다른 변환을 적용할 필요가 있다. Xalan은 원본 XML문서를 받아서 스타일시트를 이용한 변환정보를 읽은 후 HTML, 보통 텍스트나 또다른 XML 문서로 출력한다. Xalan에 대해서Xalan Java and Xalan C++프로젝트 홈에서 더 많은 것을 공부할수 있다..
웹사이트 에서, FOP는 형식화된 객체 트리를 읽고 이를 PDF문서로 변환하는 자바 프로그램이다.. 그래서 FOP는 Xalan이 HTML이나 텍스트를 이용하여서 하는 것과 비슷한 방법으로, XML문서를 읽고 PDF를 출력한다. FOP에 대해서는 이곳에서 더 자세히 알수 있다.
Cocoon은 이해가능한 출판물을 제공하기 위해 Xerces, Xalan과 FOP같은 다른 아파치 XML 기술들에 효력이 있다. 웹사이트에 설명한대로 내용과 로직과 표현방식을 분리한다:
XML 생성: XML 파일은 내용 소유자에 의해 만들어진다. XML 컨텐트는 특별히 선택된 DTD/namespace 보다는 오히려 처리하는데 특별한 지식을 요구하지 않는다. 이 계층은 항상 사람에 의하여 보통의 텍스트 편집기나 XML관련 도구/편집기를 이용하여 직접 수행된다.
XML 처리 발생기:논리적인 부분은 내용 파일과 분리되어있다.
XSL 변역: 만들어진 문서는 XSL 스타일시트를 적용하거나 특별한 형식(HTML, PDF, XML, WML, XHTML)로 형태화함으로서 변역된다.
Xang프로젝트의 목적은 개발자들이 웹을 위한 상업적 성능을 가진 XML관련 응용프로그램을 만들기 쉽게 만드는데 있다. 프로그램 구조는 자바스크립트같은 것으로 쓰여진 계층적인 XML파일안에 정의되어있다. 이 파일은 (XML 파일, 자바 플러그인등등이 될 수 있는) 자료를 접근하는 방법을 정의한다. Xang 엔진은 HTTP 요청들을 적절한 취급자(핸들러)로의 사상을 처리한다. Xang에 대하여 자세히 알고 싶다면프로젝트 홈페이지를 방문하라.
아파치 SOAP(단순 객체 접근 규약)은 W3C에 제출된SOAP submission의 구현이다. 이 것은 IBM의 SOAP4J의 구현에 기반하며 대체한다..
W3C 초벌 명세서에 의하면: SOAP는 분산 환경에서 정보의 교환을 위한 경량급 규약이다. 이 것은 다음의 세부분으로 구성된 XML 기반 규약이다.:
메시지 표현방법과 처리방법을 위한 하부 구조를 정의한 구조,
프로그램에 정의된 자료형의 객체를 표현하는 번역규칙 집합,
그리고 원격 프로세스 호출과 응답을 나타내기 위한 규정.
관련된 이야기
W02: Rub-a-dub-dub-dubya: SOAP and the Web
Batik은 다양한 목적(보기,생성, 변형)을 위해서 Scalable Vector Graphics (SVG)에서 이미지를 사용하기 원하는 응용프로그램을 위한 자바기반 도구모음이다.
이는 XML 중심이고 W3C 명세서에 따른다. 그래픽관련 구성요소를 제공하여 다른 아파치 프로젝트와는 다른 전형적이 아니다. Batik는 사용자 태그를 통해 하부구조를 확장하는 고리를 제공하고 SVG로부터 JPEG나 PNG같은 다른 형식으로 변환하는 것을 허용한다.
관련된 이야기
W14: Batik 프로젝트 소개
Crimson은 다양한 인터페이스를 통한 XML 1.0을 지원하는 선택적이고 자바 기반의 XML 파서입니다. 이 것은 Sun 프로젝트에 포함되어있는 파서이며 Xerces 2가 발표되기 전까지 임시 단계입니다.
관련된 이야기
TH08: XML을 처리하는 자바 API(JAXP) 1.1
아파치 XML 그룹하에 있지 않는 아파치와 XML 기반의 프로젝트 들이 있다.
mod_xslt.이것은 XML/XSL기반 문서를 전송하는 C기반의 모듈이다. 또한 GPL라이선스를 따른다.
AxKit는 mod_perl and Apache를 위한 XML기반의 응용서버이다.이는 컨텐트와 표현의 분리를 허용한다.
관련된 이야기
TH04: AxKit - 아파치를 위한 XML 문서 서버
[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 |
디자인 패턴 (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 |