[GeoNetwork-devel] OAI-PMH protocol support discussion

Hi all,

There’s been discussion and interest by GeoNetwork users and supporters in getting the Open Archive Initiative Protocol for Metadata Harvesting (OAI-PMH) added as an interface to the GeoNetwork catalog. This would be an alternative interface to the catalog that lives next to the Z39.50 and CSW interfaces.

In OSGEO (osgeo.org) a discussion and work has been started on OAI-MHP and Stefan Keller wrote a good overview of requirements, models and implementations for this protocol.

Through this email I hope to stimulate the discussion and maybe trigger interest to start working on implementing this in GeoNetwork :slight_smile:

Maybe some cross-fertilization between the GeoNetwork and geodata groups is also triggered through this email!

Ciao,
Jeroen


Jeroen Ticheler
FAO-UN
Tel: +39 06 57056041
http://www.fao.org/geonetwork
42.07420°N 12.34343°E

Hi, listers,

I am running the Geonetwork cvs version on my two computers for testing, one on windows XP(Tomcat5.5,Mysql5.0.20), the other on FC5(Tomcat5.5, Mysql5.1). Every time I start Mysql and then start tomcat, and browse the geonetwork, it's running well. But after about one hour more or less, something comes into wrong with database connection. The problem exist both on windows and FC5. This problem also occurs when I restart Mysql without restarting Tomcat. I find the error message in log file as following, and google the problem and find a link perhaps related to this: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem-24-3-5-3-4 , but I don't know if there are anyone else meet this problem and how to fix it, would you please help me with it? Thank you very much in advance.

Enri

------------------------------------------------------------------------------------------------------
2006-09-01 13:09:34,296 ERROR [jeeves.service] - Exception executing gui service : java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
  at java.net.SocketOutputStream.socketWrite0(Native Method)
  at java.net.SocketOutputStream.socketWrite(Unknown Source)
  at java.net.SocketOutputStream.write(Unknown Source)
  at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
  at java.io.BufferedOutputStream.flush(Unknown Source)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
  at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1222)
  at jeeves.resources.dbms.Dbms.executeQuery(Dbms.java:372)
  at jeeves.resources.dbms.Dbms.select(Dbms.java:145)
  at org.fao.geonet.guiservices.categories.Get.exec(Get.java:52)
  at jeeves.server.dispatchers.guiservices.Call.exec(Call.java:75)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiService(AbstractPage.java:119)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiServices(AbstractPage.java:104)
  at jeeves.server.dispatchers.ServiceManager.dispatchOutput(ServiceManager.java:579)
  at jeeves.server.dispatchers.ServiceManager.dispatch(ServiceManager.java:382)
  at jeeves.server.JeevesEngine.dispatch(JeevesEngine.java:608)
  at jeeves.server.sources.http.JeevesServlet.execute(JeevesServlet.java:171)
  at jeeves.server.sources.http.JeevesServlet.doGet(JeevesServlet.java:100)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
  at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
  at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1196)
  at java.lang.Thread.run(Unknown Source)

** END NESTED EXCEPTION **
----------------------------------------------------------------------------------------------------------------

Hi Enri,

you cannot restart mysql while tomcat (and hence geonetwork) is running. When
geonetwork starts a connection pool is created. If you restart mysql the pool's
entries loose the connection.

Regarding the other problem I don't know.

Cheers,
Andrea

Hi, listers,

I am running the Geonetwork cvs version on my two computers for testing, one on windows XP(Tomcat5.5,Mysql5.0.20), the other on FC5(Tomcat5.5, Mysql5.1). Every time I start Mysql and then start tomcat, and browse the geonetwork, it's running well. But after about one hour more or less, something comes into wrong with database connection. The problem exist both on windows and FC5. This problem also occurs when I restart Mysql without restarting Tomcat. I find the error message in log file as following, and google the problem and find a link perhaps related to this: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem-24-3-5-3-4 , but I don't know if there are anyone else meet this problem and how to fix it, would you please help me with it? Thank you very much in advance.

Enri

------------------------------------------------------------------------------------------------------
2006-09-01 13:09:34,296 ERROR [jeeves.service] - Exception executing gui service : java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
  at java.net.SocketOutputStream.socketWrite0(Native Method)
  at java.net.SocketOutputStream.socketWrite(Unknown Source)
  at java.net.SocketOutputStream.write(Unknown Source)
  at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
  at java.io.BufferedOutputStream.flush(Unknown Source)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
  at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1222)
  at jeeves.resources.dbms.Dbms.executeQuery(Dbms.java:372)
  at jeeves.resources.dbms.Dbms.select(Dbms.java:145)
  at org.fao.geonet.guiservices.categories.Get.exec(Get.java:52)
  at jeeves.server.dispatchers.guiservices.Call.exec(Call.java:75)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiService(AbstractPage.java:119)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiServices(AbstractPage.java:104)
  at jeeves.server.dispatchers.ServiceManager.dispatchOutput(ServiceManager.java:579)
  at jeeves.server.dispatchers.ServiceManager.dispatch(ServiceManager.java:382)
  at jeeves.server.JeevesEngine.dispatch(JeevesEngine.java:608)
  at jeeves.server.sources.http.JeevesServlet.execute(JeevesServlet.java:171)
  at jeeves.server.sources.http.JeevesServlet.doGet(JeevesServlet.java:100)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
  at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
  at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1196)
  at java.lang.Thread.run(Unknown Source)

** END NESTED EXCEPTION **
----------------------------------------------------------------------------------------------------------------

Hi, Andrea,

The problem has been resolved by hacking the jeeves code as following:

Add a method isCloosed() to jeeves.resources.dbms.Dbms Class:

  public boolean isClosed(){
    try
    {
      return conn.isClosed();
    }
    catch(SQLException e) { e.printStackTrace(); return true;}
  }

and change the method open() of jeeves.resources.dbms.DbmsPool Class:

add following line after line 124
            if (dbms.isClosed()) reconnectTime=1;

This can fix the two problem I met.

Best regards,
Enri

======= 2006-09-01 20:10:25 you wrote:=======

Hi Enri,

you cannot restart mysql while tomcat (and hence geonetwork) is running. When
geonetwork starts a connection pool is created. If you restart mysql the pool's
entries loose the connection.

Regarding the other problem I don't know.

Cheers,
Andrea

Hi, listers,

I am running the Geonetwork cvs version on my two computers for testing, one on windows XP(Tomcat5.5,Mysql5.0.20), the other on FC5(Tomcat5.5, Mysql5.1). Every time I start Mysql and then start tomcat, and browse the geonetwork, it's running well. But after about one hour more or less, something comes into wrong with database connection. The problem exist both on windows and FC5. This problem also occurs when I restart Mysql without restarting Tomcat. I find the error message in log file as following, and google the problem and find a link perhaps related to this: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem-24-3-5-3-4 , but I don't know if there are anyone else meet this problem and how to fix it, would you please help me with it? Thank you very much in advance.

Enri

------------------------------------------------------------------------------------------------------
2006-09-01 13:09:34,296 ERROR [jeeves.service] - Exception executing gui service : java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
  at java.net.SocketOutputStream.socketWrite0(Native Method)
  at java.net.SocketOutputStream.socketWrite(Unknown Source)
  at java.net.SocketOutputStream.write(Unknown Source)
  at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
  at java.io.BufferedOutputStream.flush(Unknown Source)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
  at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1222)
  at jeeves.resources.dbms.Dbms.executeQuery(Dbms.java:372)
  at jeeves.resources.dbms.Dbms.select(Dbms.java:145)
  at org.fao.geonet.guiservices.categories.Get.exec(Get.java:52)
  at jeeves.server.dispatchers.guiservices.Call.exec(Call.java:75)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiService(AbstractPage.java:119)
  at jeeves.server.dispatchers.AbstractPage.invokeGuiServices(AbstractPage.java:104)
  at jeeves.server.dispatchers.ServiceManager.dispatchOutput(ServiceManager.java:579)
  at jeeves.server.dispatchers.ServiceManager.dispatch(ServiceManager.java:382)
  at jeeves.server.JeevesEngine.dispatch(JeevesEngine.java:608)
  at jeeves.server.sources.http.JeevesServlet.execute(JeevesServlet.java:171)
  at jeeves.server.sources.http.JeevesServlet.doGet(JeevesServlet.java:100)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
  at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
  at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1196)
  at java.lang.Thread.run(Unknown Source)

** END NESTED EXCEPTION **
----------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
GeoNetwork-devel mailing list
GeoNetwork-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geonetwork-devel
GeoNetwork OpenSource is maintained at http://sourceforge.net/projects/geonetwork

= = = = = = = = = = = = = = = = = = = =

Thanks Enri,

I just added your patch to jeeves.

Cheers,
Andrea

Hi, Andrea,

The problem has been resolved by hacking the jeeves code as following:

Add a method isCloosed() to jeeves.resources.dbms.Dbms Class:

  public boolean isClosed(){
    try
    {
      return conn.isClosed();
    }
    catch(SQLException e) { e.printStackTrace(); return true;}
  }

and change the method open() of jeeves.resources.dbms.DbmsPool Class:

add following line after line 124
            if (dbms.isClosed()) reconnectTime=1;

This can fix the two problem I met.

Best regards,
Enri

======= 2006-09-01 20:10:25 you wrote:=======

>Hi Enri,
>
>you cannot restart mysql while tomcat (and hence geonetwork) is running. When
>geonetwork starts a connection pool is created. If you restart mysql the pool's
>entries loose the connection.
>
>Regarding the other problem I don't know.
>
>Cheers,
>Andrea
>
>> Hi, listers,
>>
>> I am running the Geonetwork cvs version on my two computers for testing, one on windows XP(Tomcat5.5,Mysql5.0.20), the other on FC5(Tomcat5.5, Mysql5.1). Every time I start Mysql and then start tomcat, and browse the geonetwork, it's running well. But after about one hour more or less, something comes into wrong with database connection. The problem exist both on windows and FC5. This problem also occurs when I restart Mysql without restarting Tomcat. I find the error message in log file as following, and google the problem and find a link perhaps related to this: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem-24-3-5-3-4 , but I don't know if there are anyone else meet this problem and how to fix it, would you please help me with it? Thank you very much in advance.
>>
>> Enri
>>
>> ------------------------------------------------------------------------------------------------------
>> 2006-09-01 13:09:34,296 ERROR [jeeves.service] - Exception executing gui service : java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:
>>
>>
>> ** BEGIN NESTED EXCEPTION **
>>
>> com.mysql.jdbc.CommunicationsException
>> MESSAGE: Communications link failure due to underlying exception:
>>
>> ** BEGIN NESTED EXCEPTION **
>>
>> java.net.SocketException
>> MESSAGE: Software caused connection abort: socket write error
>>
>> STACKTRACE:
>>
>> java.net.SocketException: Software caused connection abort: socket write error
>> at java.net.SocketOutputStream.socketWrite0(Native Method)
>> at java.net.SocketOutputStream.socketWrite(Unknown Source)
>> at java.net.SocketOutputStream.write(Unknown Source)
>> at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
>> at java.io.BufferedOutputStream.flush(Unknown Source)
>> at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2739)
>> at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
>> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
>> at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
>> at com.mysql.jdbc.Connection.execSQL(Connection.java:3004)
>> at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1128)
>> at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1222)
>> at jeeves.resources.dbms.Dbms.executeQuery(Dbms.java:372)
>> at jeeves.resources.dbms.Dbms.select(Dbms.java:145)
>> at org.fao.geonet.guiservices.categories.Get.exec(Get.java:52)
>> at jeeves.server.dispatchers.guiservices.Call.exec(Call.java:75)
>> at jeeves.server.dispatchers.AbstractPage.invokeGuiService(AbstractPage.java:119)
>> at jeeves.server.dispatchers.AbstractPage.invokeGuiServices(AbstractPage.java:104)
>> at jeeves.server.dispatchers.ServiceManager.dispatchOutput(ServiceManager.java:579)
>> at jeeves.server.dispatchers.ServiceManager.dispatch(ServiceManager.java:382)
>> at jeeves.server.JeevesEngine.dispatch(JeevesEngine.java:608)
>> at jeeves.server.sources.http.JeevesServlet.execute(JeevesServlet.java:171)
>> at jeeves.server.sources.http.JeevesServlet.doGet(JeevesServlet.java:100)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>> at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:831)
>> at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
>> at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1196)
>> at java.lang.Thread.run(Unknown Source)
>>
>>
>> ** END NESTED EXCEPTION **
>> ----------------------------------------------------------------------------------------------------------------
>>
>>
>>
>
>-------------------------------------------------------------------------
>Using Tomcat but need to do more? Need to support web services, security?
>Get stuff done quickly with pre-integrated technology to make your job easier
>Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
>http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
>_______________________________________________
>GeoNetwork-devel mailing list
>GeoNetwork-devel@lists.sourceforge.net
>https://lists.sourceforge.net/lists/listinfo/geonetwork-devel
>GeoNetwork OpenSource is maintained at http://sourceforge.net/projects/geonetwork

= = = = = = = = = = = = = = = = = = = =