objectbridge-developers Mailing List for ObJectRelationalBridge (Page 38)
Brought to you by:
thma
You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(14) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(33) |
Feb
(8) |
Mar
(3) |
Apr
(1) |
May
(18) |
Jun
(6) |
Jul
(15) |
Aug
(71) |
Sep
(29) |
Oct
(43) |
Nov
(77) |
Dec
(54) |
2002 |
Jan
(54) |
Feb
(147) |
Mar
(144) |
Apr
(163) |
May
(307) |
Jun
(240) |
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: Alex C. <ac...@in...> - 2002-02-20 22:48:42
|
From: Ricardo Arg=FCello [mailto:ri...@ya...] > It turns out that this error: > java.sql.SQLException: Server configuration denies access=20 > to data source >=20 > was caused because MySql used its "max_connections" limit of 100. >=20 > I tried to initialize MySql with a parameter of=20 > max_connections=3D1000, but it gave me the same error. Are you sure? I usually see this error when there's a permissions = problem. -0xe1a |
From: <ri...@ya...> - 2002-02-20 22:44:53
|
Hello, It turns out that this error: java.sql.SQLException: Server configuration denies access to data = source was caused because MySql used its "max_connections" limit of 100. I tried to initialize MySql with a parameter of max_connections=3D1000, = but it gave me the same error. What leads me to think that it's a problem with OJB not closing = connections. It looks like OJB open a lot of connections trying to materialize the = dynamic proxies, but then it stops and gives the Exception, because all = the connections are occupied. Why does OJB open so many connections when using dynamic proxies? Thanks in advance, Ricardo Arguello ----- Original Message -----=20 From: "Mahler Thomas" <tho...@it...> To: "'Ricardo Arg=FCello'" <ri...@ya...> Cc: "Objectbridge (E-Mail)" = <obj...@li...> Sent: Tuesday, February 19, 2002 4:48 AM Subject: AW: [OJB-developers] ERROR: Server configuration denies access = to data source > Hi Ricardo, >=20 > >=20 > > Hello, > >=20 > > Since OJB is performing REALLY slowly, I tried to add the=20 > > next tag to my repository.xml file: > >=20 > > <class.proxy>dynamic</class.proxy> > >=20 > > in every <ClassDescriptor> tag. > >=20 > > All my objects implement an interface, so this theorically=20 > > should work fine. > > That's the only thing I changed in this file, and now I'm=20 > > getting this strange exception: > =20 > > [DEFAULT] ERROR: Server configuration denies access to data source > > java.sql.SQLException: Server configuration denies access to=20 > > data source > > at org.gjt.mm.mysql.MysqlIO.init(Unknown Source) > > at org.gjt.mm.mysql.Connection.connectionInit(Unknown = Source) > > at=20 > > org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Unknown Source) > > at org.gjt.mm.mysql.Driver.connect(Unknown Source) > > at=20 > > java.sql.DriverManager.getConnection(DriverManager.java:517) > > at=20 > > java.sql.DriverManager.getConnection(DriverManager.java:177) > > at=20 > > = ojb.broker.accesslayer.ConnectionFactoryDefaultImpl.newConnection(Con > > nectionFactoryDefaultImpl.java:72) > <snip> >=20 > OK this exception is raised during the materilization of a proxy. But = the > error is NOT Proxy related at all. You get an Error from the the MySQL > driver. > I'm not a MySQL expert thus I can't help here. >=20 > >=20 > >=20 > > -------------------------------------------------------------- > > ------------ > >=20 > > After a LOT of these messages: =20 > >=20 > > [DEFAULT] WARN: problems with platform=20 > > ojb.broker.platforms.PlatformMySQLImpl: > > ojb.broker.platforms.PlatformMySQLImpl > > [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead > >=20 >=20 > This is totally harmless. It just tells you that OJB does not use any = MySql > specific PlatForm code. >=20 > >=20 > >=20 > > Do you have any idea of what's might the problem be? >=20 > IMHO this is a MySQL specific problem. > =20 > > Besides this, how can I make OJB perform faster? > >=20 >=20 > Mhh. > Of course using an O/R layer has a certain impact on performance. > If you are using handcoded JDBC and handcoded mappings you can do = things > much faster. > There is nothing like a free lunch ! >=20 > But: has been carefully designed to minimize the performance impact. > There is a special JUnit target 'performance' >=20 > By calling 'build.sh performance' you can execute the OJB performance > testsuite. > The testsuite runs to tests: > 1. running five tescenarios using OJB > 2. running the same scenarios with manual coded JDBC calls. >=20 > If you are executing it out of the box the tests are executed against = the > HSQLDB database that ships with OJB. > You will see that the OJB mode is about half as fast as the native = JDBC > mode. > (For instance inserting 10.000 Objects takes about 2500 msecs using = JDBC and > about 5000 msecs using OJB on one of my machines.) >=20 > This sounds bad. But you have to take in account that HDSQL does = everything > in memory and that there is no network overhead involved. >=20 > Now just change the target database (in the repository.xml) to say MS = access > and you will see a totally different picture: > Inserting 10.000 object via JDBC takes 50.000 msecs and 52.500 msecs = using > OJB. >=20 > You see: the absolute OJB overhead remains the same but the factor = OJB/JDBC > decreases enormously. >=20 > Please try this performance test against your target database and tell = us > your exact results. I am almost sure that your results will look quite > similar! >=20 >=20 > On the other hand: There has been a lot of work on OJB internals in = the last > months and it may well be that these refactorings had a negative = performance > impact. This must be carefully checked! > We will need another performance tuning code-walkthrough before we can > release OJB 1.0. >=20 > HTH, >=20 > Thomas >=20 > >=20 > > Thanks in advance! > >=20 > > Ricardo Arguello > >=20 > >=20 > > _______________________________________________ > > Objectbridge-developers mailing list > > Obj...@li... > > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > >=20 > |
From: Jason v. Z. <jv...@ze...> - 2002-02-20 16:55:54
|
Hi, I'm about to dig into OJB and I was wondering if any (Thomas, possibly) can draw a short comparison between the design patterns of Scott Ambler and OJB. -- jvz. Jason van Zyl jv...@ap... http://tambora.zenplex.org |
From: Mahler T. <tho...@it...> - 2002-02-20 08:03:59
|
Hi Jakob, thanks for the patch! I'm also no ANTLR and OQL expert but I will check your patch and = integrate it into the distribution. What about your CVS problems? Did you get things running? cu, Thomas > -----Urspr=FCngliche Nachricht----- > Von: Jakob Braeuchi [mailto:jbr...@ho...] > Gesendet: Mittwoch, 20. Februar 2002 08:31 > An: Objectbridge Developers List (E-mail) > Betreff: [OJB-developers] OJB OQL >=20 >=20 > hi, >=20 > this patch fixes problems with OQL nil and between. >=20 > query.create("select persons from brj.ojb.Person where=20 > geburtsDatum =3D nil"); >=20 > here the grammer was going into the equalityExpr method and did not > recognize "nil". >=20 > query.create("select persons from brj.ojb.Person where test=20 > between $1 and > $2 and name like $3"); > query.bind(new Integer(80)); > query.bind(new Integer(100)); > query.bind("%er"); >=20 > in this case the bind assumed that each criterion should have only = one > parameter > and looked for three criteria in the above example. >=20 > i have to admit i'm neither an antlr nor an oql expert ! >=20 > jakob >=20 |
From: Jakob B. <jbr...@ho...> - 2002-02-20 07:31:24
|
hi, this patch fixes problems with OQL nil and between. query.create("select persons from brj.ojb.Person where geburtsDatum = nil"); here the grammer was going into the equalityExpr method and did not recognize "nil". query.create("select persons from brj.ojb.Person where test between $1 and $2 and name like $3"); query.bind(new Integer(80)); query.bind(new Integer(100)); query.bind("%er"); in this case the bind assumed that each criterion should have only one parameter and looked for three criteria in the above example. i have to admit i'm neither an antlr nor an oql expert ! jakob |
From: Mahler T. <tho...@it...> - 2002-02-19 11:06:16
|
Hi Bertrand, > > Hi Thomas > > I saw in the contrib archive that there is a new repository dtd, ... > Are they any plan to make it the default impl in the future? > There have been a lot of discussions regarding the repository grammar. Several people have worked on proposals for a better DTD (or schema). I placed the latest snapshot of these efforts into the contrib archive to allow others to play around with it. A redesign of the repository grammar is one of the last open feature requests for OJB 1.0. There will definitely be a redesign to the DTD but I don't know yet how it will look like exactly. AFAIK no one is currently working on this issue. Of course we will provide an XSL stylesheet that will help users to migrate their 'old' OJB repositories to the new grammar. Thomas > Best Regards > > Bertrand > > > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > |
From: Mahler T. <tho...@it...> - 2002-02-19 10:25:04
|
Hi all, OJB has finally hit the academic world! I found an interesting link on the web pointing to a BA thesis covering the design of an O/R framework. The Framework is called Jakamar. http://www.lap.ttu.ee/erki/failid/konspekt/bakalaureusetoo/thesis.pdf <http://www.lap.ttu.ee/erki/failid/konspekt/bakalaureusetoo/thesis.pdf> IMHO Jakamar reuses a lot of things from OJB and its underlying concepts. The presentation gives a good overview of the Jakamar (OJB) architecture and the design pattern based approach. The thesis even contains a performance comparison between Jakamar and OJB and a feature comparison. (I won't comment on those comparisons here) I like some of the ideas presented (e.g. PersistenceBroker provides factory methods to obtain queries). Sometimes the naming of classes is better than in OJB. I think it is a good idea to have a deeper look at this thesis. Maybe we can ask the author to share ideas or even collaborate directly. cu, Thomas |
From: Mahler T. <tho...@it...> - 2002-02-19 09:49:30
|
Hi Ricardo, > > Hello, > > Since OJB is performing REALLY slowly, I tried to add the > next tag to my repository.xml file: > > <class.proxy>dynamic</class.proxy> > > in every <ClassDescriptor> tag. > > All my objects implement an interface, so this theorically > should work fine. > That's the only thing I changed in this file, and now I'm > getting this strange exception: > [DEFAULT] ERROR: Server configuration denies access to data source > java.sql.SQLException: Server configuration denies access to > data source > at org.gjt.mm.mysql.MysqlIO.init(Unknown Source) > at org.gjt.mm.mysql.Connection.connectionInit(Unknown Source) > at > org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Unknown Source) > at org.gjt.mm.mysql.Driver.connect(Unknown Source) > at > java.sql.DriverManager.getConnection(DriverManager.java:517) > at > java.sql.DriverManager.getConnection(DriverManager.java:177) > at > ojb.broker.accesslayer.ConnectionFactoryDefaultImpl.newConnection(Con > nectionFactoryDefaultImpl.java:72) <snip> OK this exception is raised during the materilization of a proxy. But the error is NOT Proxy related at all. You get an Error from the the MySQL driver. I'm not a MySQL expert thus I can't help here. > > > -------------------------------------------------------------- > ------------ > > After a LOT of these messages: > > [DEFAULT] WARN: problems with platform > ojb.broker.platforms.PlatformMySQLImpl: > ojb.broker.platforms.PlatformMySQLImpl > [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead > This is totally harmless. It just tells you that OJB does not use any MySql specific PlatForm code. > > > Do you have any idea of what's might the problem be? IMHO this is a MySQL specific problem. > Besides this, how can I make OJB perform faster? > Mhh. Of course using an O/R layer has a certain impact on performance. If you are using handcoded JDBC and handcoded mappings you can do things much faster. There is nothing like a free lunch ! But: has been carefully designed to minimize the performance impact. There is a special JUnit target 'performance' By calling 'build.sh performance' you can execute the OJB performance testsuite. The testsuite runs to tests: 1. running five tescenarios using OJB 2. running the same scenarios with manual coded JDBC calls. If you are executing it out of the box the tests are executed against the HSQLDB database that ships with OJB. You will see that the OJB mode is about half as fast as the native JDBC mode. (For instance inserting 10.000 Objects takes about 2500 msecs using JDBC and about 5000 msecs using OJB on one of my machines.) This sounds bad. But you have to take in account that HDSQL does everything in memory and that there is no network overhead involved. Now just change the target database (in the repository.xml) to say MS access and you will see a totally different picture: Inserting 10.000 object via JDBC takes 50.000 msecs and 52.500 msecs using OJB. You see: the absolute OJB overhead remains the same but the factor OJB/JDBC decreases enormously. Please try this performance test against your target database and tell us your exact results. I am almost sure that your results will look quite similar! On the other hand: There has been a lot of work on OJB internals in the last months and it may well be that these refactorings had a negative performance impact. This must be carefully checked! We will need another performance tuning code-walkthrough before we can release OJB 1.0. HTH, Thomas > > Thanks in advance! > > Ricardo Arguello > > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > |
From: <ber...@wa...> - 2002-02-19 09:07:30
|
Hi Thomas I saw in the contrib archive that there is a new repository dtd, ... Are they any plan to make it the default impl in the future? Best Regards Bertrand |
From: <ber...@wa...> - 2002-02-19 09:03:55
|
Hi, It seems that the RowReaderDefaultImpl class has change. I just post this mail help person if they have the same problem. ReadObjectFrom use an Object array as his first argument and not a rs anymore. It was a bit misleading because Thomas hasn't had the time to update the documentation yet. The Javadoc has the right method signature but the docstring still refer to the rs. Tutorial need to be updated too. Looking at the test class it is easy to find the solution. Change your RowReader ReadObjectFrom to also use a object array and call super.ReadObjectFrom with the row. Best regards Bertrand |
From: <ri...@ya...> - 2002-02-18 20:02:00
|
Hello, Since OJB is performing REALLY slowly, I tried to add the next tag to my = repository.xml file: <class.proxy>dynamic</class.proxy> in every <ClassDescriptor> tag. All my objects implement an interface, so this theorically should work = fine. That's the only thing I changed in this file, and now I'm getting this = strange exception: [DEFAULT] ERROR: Server configuration denies access to data source java.sql.SQLException: Server configuration denies access to data source at org.gjt.mm.mysql.MysqlIO.init(Unknown Source) at org.gjt.mm.mysql.Connection.connectionInit(Unknown Source) at org.gjt.mm.mysql.jdbc2.Connection.connectionInit(Unknown = Source) at org.gjt.mm.mysql.Driver.connect(Unknown Source) at java.sql.DriverManager.getConnection(DriverManager.java:517) at java.sql.DriverManager.getConnection(DriverManager.java:177) at = ojb.broker.accesslayer.ConnectionFactoryDefaultImpl.newConnection(Con nectionFactoryDefaultImpl.java:72) at = ojb.broker.accesslayer.ConnectionManager.getNewConnection(ConnectionM anager.java:106) at = ojb.broker.accesslayer.ConnectionManager.getConnectionForClassDescrip tor(ConnectionManager.java:93) at = ojb.broker.accesslayer.StatementsForClass.getConnection(StatementsFor Class.java:134) at = ojb.broker.accesslayer.StatementsForClass.prepareStatement(Statements ForClass.java:152) at = ojb.broker.accesslayer.StatementsForClass.getSelectByPKStmt(Statement sForClass.java:370) at = ojb.broker.accesslayer.StatementManager.getSelectByPKStatement(Statem entManager.java:439) at = ojb.broker.accesslayer.JdbcAccess.materializeObject(JdbcAccess.java:3 39) at = ojb.broker.singlevm.PersistenceBrokerImpl.getDBObject(PersistenceBrok erImpl.java:1090) at = ojb.broker.singlevm.PersistenceBrokerImpl.getObjectByIdentity(Persist enceBrokerImpl.java:1208) at = ojb.broker.accesslayer.IndirectionHandler.materializeSubject(Indirect ionHandler.java:206) at = ojb.broker.accesslayer.IndirectionHandler.getRealSubject(IndirectionH andler.java:193) at = ojb.broker.accesslayer.IndirectionHandler.invoke(IndirectionHandler.j ava:163) at $Proxy0.getNombre(Unknown Source) at = charlie.util.JavascriptHelper.generateProyectosOptions(JavascriptHelp er.java) at org.apache.jsp.tarea$jsp._jspService(tarea$jsp.java:144) at = org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at = org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspSer vlet.java:202) at = org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3 82) at = org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at = org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp atcher.java:679) at = org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationD ispatcher.java:431) at = org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDis patcher.java:355) at = org.apache.struts.action.ActionServlet.processValidate(ActionServlet. java:2149) at = org.apache.struts.action.ActionServlet.process(ActionServlet.java:156 5) at = org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at = org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl icationFilterChain.java:247) at = org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF ilterChain.java:193) at = org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV alve.java:243) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:566) at = org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:472) at = org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at = org.apache.catalina.core.StandardContextValve.invoke(StandardContextV alve.java:201) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:566) at = org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:472) at = org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at = org.apache.catalina.core.StandardContext.invoke(StandardContext.java: 2344) at = org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j ava:164) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:566) at = org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatche rValve.java:170) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:564) at = org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j ava:170) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:564) at = org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 462) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:564) at = org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:472) at = org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at = org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal ve.java:163) at = org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline .java:566) at = org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav a:472) at = org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at = org.apache.catalina.connector.http.HttpProcessor.process(HttpProcesso r.java:1011) at = org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.ja va:1106) at java.lang.Thread.run(Thread.java:484) -------------------------------------------------------------------------= - After a LOT of these messages: =20 [DEFAULT] WARN: problems with platform = ojb.broker.platforms.PlatformMySQLImpl: ojb.broker.platforms.PlatformMySQLImpl [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead Do you have any idea of what's might the problem be? Besides this, how can I make OJB perform faster? Thanks in advance! Ricardo Arguello |
From: Jakob B. <jbr...@ho...> - 2002-02-18 16:43:38
|
hi ricardo, everything is fine, ojb cannot find a platform for mysql and writes it to the console. if you load the zip from my last post, you'll have a platform for mysql. hth jakob ----- Original Message ----- From: "Ricardo Argüello" <ri...@ya...> To: "objectbridge" <obj...@li...> Sent: Monday, February 18, 2002 4:39 PM Subject: [OJB-developers] problems with platform ojb.broker.platforms.PlatformMySQLImpl Hello, I'm using MySQL. I upgraded to OJB 0.7.343, and now I get this message when I initialize it: [BOOT] INFO: OJB.properties: file:/C:/Java/Tomcat401/webapps/charlie-dev/WEB-INF/classes/OJB.properties [DEFAULT] WARN: problems with platform ojb.broker.platforms.PlatformMySQLImpl: ojb.broker.platforms.PlatformMySQLImpl [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead [DEFAULT] WARN: problems with platform ojb.broker.platforms.PlatformMySQLImpl: ojb.broker.platforms.PlatformMySQLImpl [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead It looks like everything is working right, I just wanted to know what is this message about. Thanks in advance, Ricardo Arguello _______________________________________________ Objectbridge-developers mailing list Obj...@li... https://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: <ri...@ya...> - 2002-02-18 15:38:36
|
Hello, I'm using MySQL. I upgraded to OJB 0.7.343, and now I get this message = when I initialize it: [BOOT] INFO: OJB.properties: = file:/C:/Java/Tomcat401/webapps/charlie-dev/WEB-INF/classes/OJB.propertie= s [DEFAULT] WARN: problems with platform = ojb.broker.platforms.PlatformMySQLImpl: = ojb.broker.platforms.PlatformMySQLImpl [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead [DEFAULT] WARN: problems with platform = ojb.broker.platforms.PlatformMySQLImpl: = ojb.broker.platforms.PlatformMySQLImpl [DEFAULT] WARN: OJB will use PlatformDefaultImpl instead It looks like everything is working right, I just wanted to know what is = this message about. Thanks in advance, Ricardo Arguello |
From: Jakob B. <jbr...@ho...> - 2002-02-17 09:54:09
|
hi, the attached zip contains several enhancements to version 07.343: - deferred loading (lazy) for 1:1 relationships - wasNull when reading from ResultSet - platform cacheing - platform functions for setObject(), setNull() - a MySql platform to fix setObject for Types.BIT - StatementManager bindInsert and bindUpdate use platform functions now the most important feature is deferred loading for 1:1 relationships. it's based on DynamicProxies and thus requires you to implement an interface for the target side of the relationship (referenced.class). to enable it, use <proxyReference>true</proxyReference> in ReferenceDescriptor: <ReferenceDescriptor id="1"> <rdfield.name>partner</rdfield.name> <referenced.class>brj.ojb.Person</referenced.class> <fk_descriptor_ids>9</fk_descriptor_ids> <proxyReference>true</proxyReference> </ReferenceDescriptor> for consistency i also renamed <proxy> to <proxyCollection> for CollectionDescriptor. jakob |
From: Jakob B. <jbr...@ho...> - 2002-02-15 13:30:29
|
hi florian, i really think modifiying the driver is the way to go here because there's no other type than BIT to model a Boolean in java.sql.Types. jakob ----- Original Message ----- From: "Florian Bruckner" <bf...@fl...> To: "Jakob Braeuchi" <jbr...@ho...> Cc: <obj...@li...> Sent: Friday, February 15, 2002 11:28 AM Subject: RE: [OJB-developers] StatementManager bindInsert, bindUpdate > > > i'm using it as a boolean. > > according to the mysql doc BIT, BOOL and CHAR(1) are synonyms, but the > > driver does not know BIT. > > Thats what I thought. I think the problem is really within your mapping, the > old code just covered an inconsistency within it. Try to modify the type so > it is regocnised by the JDBC-Driver. > > > > > maybe this is an additional point for the DatabasePlatform ? > > Of course you could also modify the JDBC-Driver ;-) > > > > > jakob > > > > Florian > > |
From: Florian B. <bf...@fl...> - 2002-02-15 10:28:32
|
> i'm using it as a boolean. > according to the mysql doc BIT, BOOL and CHAR(1) are synonyms, but the > driver does not know BIT. Thats what I thought. I think the problem is really within your mapping, the old code just covered an inconsistency within it. Try to modify the type so it is regocnised by the JDBC-Driver. > > maybe this is an additional point for the DatabasePlatform ? Of course you could also modify the JDBC-Driver ;-) > > jakob > Florian |
From: Mahler T. <tho...@it...> - 2002-02-15 10:05:46
|
Hi all, I set up the CVS at sourceforge again. The CVS entry page is here: http://sourceforge.net/cvs/?group_id=13647 The active module is called ojb-1-0. You can view it at: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/objectbridge/ojb-1-0/ With cvs -z3 -d:pserver:ano...@cv...:/cvsroot/objectbridge co ojb-1-0 you can checkout the latest snapshot. (When prompted for a password for anonymous, simply press the Enter key) Those who wish to check in code should contact me and send me their SourceForge account so that I can add them to the developer list. We need some strict rules to avoid problems with CVS. I want to have have basic guidelines similar to the Jakarta guidelines (http://jakarta.apache.org/site/guidelines.html) cu, Thomas |
From: Mahler T. <tho...@it...> - 2002-02-15 09:47:10
|
Hi Matthew, > -----Urspr=FCngliche Nachricht----- > Von: Matthew Baird [mailto:ma...@so...] > Gesendet: Donnerstag, 14. Februar 2002 18:43 > An: 'Mahler Thomas' > Betreff: a couple questions >=20 >=20 > when you are loading an object that has a relationship to=20 > many objects (a > one to many relationship), the sql that you generate to load,=20 > what does it > look like? You can enable tracing of SQL statements in the OJB.properties file by setting ojb.broker.accesslayerSqlGenerator.LogLevel=3DDEBUG >=20 > Let's say A has relations to many B's. >=20 > In castor, the query that is generated includes all the A=20 > attributes, and > the foreign key from B that refers to A. so >=20 > SELECT A.id, A.foo, A.bar, B.fk_to_A FROM A, B WHERE .... >=20 > what this results in is you get a resultset back with=20 > multiple repeated > rows. How does objectbridge do it? >=20 > Also.... >=20 > when I do a query in objectbridge and get many results, do I=20 > materialize > those objects from an underlying resultset as I need them, or does > objectbridge do all the object materialization up front? I=20 > looked at the > code and it looked like the former, but I wanted to get confirmation. >=20 Maybe my English is too bad. I don't exactly understand your question. The process for loading an A with a Collection of Bs works like follows (simplified version): 1. generate SQL for materialization of A (primitive Attributes only): "SELECT A.id, A.foo, A.bar FROM A WHERE ...." 2. retrieve all 1-1 references 3. retrieve all 1-n references 3a. if the B collection descriptor is marked as lazy no further materialization happens but a CollectionProxy is placed in the B = collection attribute. This allows loading on demand. 3b. If the B collection descriptor is not lazy a getCollectionByQuery = is performed to retrieve the collection attribute. 3b1. This query looks like "SELECT B.id, B.foo, B.bar, B.fk_to_A FROM = B, A WHERE B.fk_to_A =3D A.id". OJB retrieve a ResultSet based on this = query. OJB use RsIterators to read all B instance into the collection attribute. 3b2. If the Class B is configured to use instance proxies the B objects = are not fully materialized from the current row. Only lightweight proxies = are generated. 3b.3. If no proxies are use Objects are read fully. This concept allows for maximum laziness during the matreialization = process. But: OJB does currently not allow to perform just one large JOIN = statement to materialize large object nets from a single resultset. This would = require a major redesign. I hope this answers some of your questions. cu, Thomas > m >=20 |
From: Mahler T. <tho...@it...> - 2002-02-15 09:26:05
|
Hi Dale, > -----Urspr=FCngliche Nachricht----- > Von: Dal...@bd... [mailto:Dal...@bd...] > Gesendet: Freitag, 15. Februar 2002 02:52 > An: Mahler Thomas > Betreff: Re: AW: [OJB-developers] Base class queries on inheritance > mapped to 2 tables >=20 >=20 >=20 > Hi Thomas. >=20 > I did some tracing through in the 0.7.343 code and finally=20 > got my two-table > inheritance test working. I wasn't aware that in order for=20 > two-table inheritance > to work, the query must be on an interface rather than a=20 > concrete class. Once I > created [and queried on] an interface, the test was successful. >=20 > Having to query on interfaces, however, might turn out to be=20 > rather limiting for > programmers working with legacy code. If a programmer *must*=20 > use concrete base > classes, OJB won't work for them because=20 > getCollectionByQuery() and other > methods only check extents for interfaces. >=20 Mmh, OJB provides support for queries against interfaces AND against Baseclasses! If you want to query against a base clase you MUST declare which = derived classes are in the baseclasses extent in the repository.xml. There are several testcases that check this behaviour.=20 If some special things do not work we need testcases to demonstrate the failure. > BTW, this is also why single table inheritance doesn't work.=20 > In the example I > posted with a base class and descendent class with different=20 > numbers of fields, > the exception in the RsIterator was caused because the=20 > SqlGenerator was > generating a query for the Base class (a concrete class with=20 > only 3 fields). It > did this because the broker's collection and iterator query=20 > methods don't read > extents for non-interface classes. There weren't enough=20 > columns in the ResultSet > when it came time to materialize the Descendent class (a=20 > concrete class with 4 > fields, 3 from Base + 1). I added this bug to my list. this must be fixed! >=20 > I've been thinking that there might be two possible fixes for=20 > this. One fix > would be to modify SqlGenerator.getListOfColumns to traverse=20 > extents. I think > this would be more of a hack, though.=20 I agree! >The second fix might be=20 > to rewrite the get > collection/iterator functions to ignore the difference=20 > between interfaces and > concrete classes and always traverse extents. Yes this would match with my original extent concepts. > Finally, to=20 > really make the code > robust, Criteria (or Query) could be modified so that a user=20 > could specify a > query for a base class and descendents, or just the base=20 > class. I don't know why > someone would want to just query for base instances and not=20 > descendents, but you > never know. We already have this flexibility by modifying ClassDescriptors at = runtime! >=20 > I'll probably start trying out some of these changes myself.=20 > If you have any > advice or input on this, I'd like to hear it. >=20 IMHO the best thing is to preserve the original notion of extents. Thus = I prefer the second solution you mention! regarding collaboration. I can add you to the OJB list of developers so = that you could check in your code directly into the cvs repository!=20 Please tell me your SourceForge account if you want to use CVS = directly! cu, Thomas > Dale Davis >=20 >=20 |
From: Jakob B. <jbr...@ho...> - 2002-02-15 07:39:26
|
hi, i'm using it as a boolean. according to the mysql doc BIT, BOOL and CHAR(1) are synonyms, but the driver does not know BIT. maybe this is an additional point for the DatabasePlatform ? jakob ----- Original Message ----- From: "Florian Bruckner" <bf...@fl...> To: "Jakob Braeuchi" <jbr...@ho...>; <obj...@li...> Sent: Thursday, February 14, 2002 9:19 PM Subject: RE: [OJB-developers] StatementManager bindInsert, bindUpdate > Hi, > > the type in bindInsert is to be able to insert BLOB/CLOB values. At least > the informix jdbc driver needs this hint. The reason why it isn't in > bindUpdate is that I missed it when I sent Thomas the patch for BLOB/CLOB > support. > > I'm curious, why do you want to insert/update a BIT when it doesn't exist in > mysql? > > regards, > Florian > > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > |
From: Florian B. <bf...@fl...> - 2002-02-14 20:19:58
|
Hi, the type in bindInsert is to be able to insert BLOB/CLOB values. At least the informix jdbc driver needs this hint. The reason why it isn't in bindUpdate is that I missed it when I sent Thomas the patch for BLOB/CLOB support. I'm curious, why do you want to insert/update a BIT when it doesn't exist in mysql? regards, Florian |
From: Jakob B. <jbr...@ho...> - 2002-02-14 19:55:07
|
hi, why are the parameters bound differently in bindInsert and bindUpdate ? bindInsert: if (val != null) { stmt.setObject(i + 1, val, JdbcAccess.getSqlTypeAll(cld, i)); //stmt.setObject(i + 1, val); } else bindUpdate: Object val = values[i]; if (val != null) stmt.setObject(index, val); else the new setObject with Type used in bindInsert produces an exception for Types.BIT in mySql because this type is not supported in setObject(obj,type). the setObject without the type works perfectly. what was the reason to change setObject in 07.343 ? and why is it only in bindInsert ? thanks jakob |
From: Jakob B. <jbr...@ho...> - 2002-02-14 16:55:11
|
hi, i experimented with mySql. they do not have a real boolean, so when using rs.getObject() the result is either a Byte or a String leading to an exception in PersistentField::set(). when using getBoolean() the driver converts the string ('f' in this case) to a Boolean (false). jakob ----- Original Message ----- From: "Mahler Thomas" <tho...@it...> To: "'Darren Syzling'" <Dar...@cw...>; <obj...@li...> Sent: Thursday, February 14, 2002 12:16 PM Subject: AW: [OJB-developers] Detecting and mapping null Integer values Hi all, I prefer the wasNull() solution as getObject() is Problematic with several JDBC drivers... I will put this on my todo list ! thanks, Thomas > -----Ursprüngliche Nachricht----- > Von: Darren Syzling [mailto:Dar...@cw...] > Gesendet: Donnerstag, 14. Februar 2002 10:45 > An: obj...@li...; > tho...@ho... > Betreff: Re: [OJB-developers] Detecting and mapping null > Integer values > > > It appears to me there are two choices: > > - wasNull > > - getObject using a cast, is there any reason this wouldn't > work ? For example: > > case Types.INTEGER : > { > result = (Integer)rs.getObject(columnId); > break; > } > > getObject will return a null reference if the column value is null. > > > > Darren > > > > |--------+-----------------------> > | | "Jakob | > | | Braeuchi" | > | | <jbraeuchi@ho| > | | tmail.com> | > | | | > | | 02/13/02 | > | | 07:44 PM | > | | | > |--------+-----------------------> > > >------------------------------------------------------------- > ---------------| > | > | > | To: "Thomas Mahler" > <tho...@ho...>, Darren | > | Syzling/London/CWB@CWB > | > | cc: > obj...@li... | > | Subject: Re: [OJB-developers] Detecting and > mapping null Integer | > | values > | > > >------------------------------------------------------------- > ---------------| > > > > > hi thomas, > > what about using wasNull of ResultSet ? > > /** > * Reports whether > * the last column read had a value of SQL <code>NULL</code>. > * Note that you must first call one of the <code>getXXX</code> methods > * on a column to try to read its value and then call > * the method <code>wasNull</code> to see if the value read was > * SQL <code>NULL</code>. > * > * @return <code>true</code> if the last column value read was SQL > * <code>NULL</code> and <code>false</code> otherwise > * @exception SQLException if a database access error occurs > */ > boolean wasNull() throws SQLException; > > hth jakob > > ----- Original Message ----- > From: "Thomas Mahler" <tho...@ho...> > To: "Darren Syzling" <Dar...@cw...> > Cc: <obj...@li...> > Sent: Wednesday, February 13, 2002 8:09 PM > Subject: Re: [OJB-developers] Detecting and mapping null > Integer values > > > > Hi Darren, > > > > Darren Syzling wrote: > > > > > How can I detect null values for Integer, Long, Double > etc Java class > attributes > > > ? Let's say we're mapping an object which has the > following attributes: > > > > > > class Test > > > { > > > Integer id; > > > String name; > > > Integer sales; > > > } > > > > > > > > > Let's assume that both name and sales can be null. When > retrieving this > object > > > from the database using the PersistenceBroker the String > reference will > be null > > > but the sales reference will in fact refer to an Integer > object with a > zero > > > value. If zero is within the valid range how can we > detect that the > value is > > > actually null. > > > > > > This appears to boil down to: > JdbcAccess.getObjectFromColumn. The code > to > > > convert a string looks like: > > > > > > case Types.VARCHAR: > > > result = rs.getString(columnId); > > > break; > > > > > > If the string value is null getString will return a null > reference. But > for > > > Integer (and other classes) the following is used: > > > > > > case Types.INTEGER: > > > result = new Integer(rs.getInt(columnId)); > > > break; > > > > > > > > > > > I get your point. But: how should the above code look like to handle > > your problem correctly? I have no idea. > > If you (or somebody else) tell me how this section should > look like I > > will change it! > > > > > > java.sql.ResultSet does not tell you that a column is NULL. It just > > returns a 0. Of course this is wrong. But SUN specified it this way. > > Or am I missing something? From the java.sql.ResultSet Source: > > > > /** > > * Gets the value of the designated column in the current row > > * of this <code>ResultSet</code> object as > > * an <code>int</code> in the Java programming language. > > * > > * @param columnIndex the first column is 1, the > second is 2, ... > > * @return the column value; if the value is SQL > <code>NULL</code>, > > * the value returned is <code>0</code> > > * @exception SQLException if a database access error occurs > > */ > > int getInt(int columnIndex) throws SQLException; > > > > > > > getInt will return 0 for null and the an integer will be > created with a > zero > > > value. > > > > > > The Conversion Strategy stuff appears too late in the day > to make the > > > conversion. > > > > > > You are right, things are already on the wrong track at > this point.... > > > > How is everybody else handling this or have I missed something ? > > > > > > cu, > > > > Thomas > > > > > > > > > > > > > Thanks > > > Darren > > > > > > > > > > > > > ************************************************************** > ************** > ************************************************************** > ************ > > > This e-mail has been prepared using information believed by the > author to be > > > reliable and accurate, but Thales Information Systems > Finance makes no > > > warranty as to accuracy or completeness. In particular Thales > Information > > > Systems Finance does not accept responsibility for > changes made to > this > > > e-mail after it was sent. Any opinions expressed in > this document are > those of > > > the author and do not necessarily reflect the opinions > of the company > or its > > > affiliates. They may be subject to change without notice. > > > This e-mail, its content and any files transmitted with it are > intended > > > solely for the addressee(s) and may be legally privileged > and/or > > > confidential. Access by any other party is unauthorised > without the > express > > > written permission of the sender. If you have received > this e-mail in > error you > > > may not copy or use the contents, attachments or > information in any > way. > > > Please destroy it and contact the sender via the Thales > Information > Systems > > > Finance switchboard in London at +44 (0) 20 7650 0100 or > via e-mail > return. > > > This message and any attachments have been scanned > > > for viruses prior to leaving the originators network. The > originator > does not > > > guarantee the security of this message and will not be > responsible for > any > > > damages arising from any alteration of this message by a > third party or > as a > > > result of any virus being passed on. > > > > ************************************************************** > ************** > ************************************************************** > ************* > > > > > > > > > > > > _______________________________________________ > > > Objectbridge-developers mailing list > > > Obj...@li... > > > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > > > > > > > > > > > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > _______________________________________________ Objectbridge-developers mailing list Obj...@li... https://lists.sourceforge.net/lists/listinfo/objectbridge-developers _______________________________________________ Objectbridge-developers mailing list Obj...@li... https://lists.sourceforge.net/lists/listinfo/objectbridge-developers _______________________________________________ Objectbridge-developers mailing list Obj...@li... https://lists.sourceforge.net/lists/listinfo/objectbridge-developers |
From: Florian B. <bf...@fl...> - 2002-02-14 12:30:48
|
Hi, just wanted to report that I was able to run the junit test suite against an informix database with just one error: junit: [junit] .[BOOT] INFO: OJB.properties: file:/C:/work/OJB/ojb-0.7.343-src/ojb-0.7.343/build/test/ojb/OJB.properties [junit] .....[DEFAULT] ERROR: after inserting an object it should be equal to its re-read pendant expected:<Single quote 'article > but was:<Single quote 'article> [junit] junit.framework.AssertionFailedError: after inserting an object it should be equal to its re-read pendant expected:<Single quote 'article > but was:<Single quote 'article> [junit] at junit.framework.Assert.fail(Assert.java:51) [junit] at junit.framework.Assert.failNotEquals(Assert.java:234) [junit] at junit.framework.Assert.assertEquals(Assert.java:68) [junit] at test.ojb.broker.PersistenceBrokerTest.testEscaping(PersistenceBrokerTest.jav a:423) [junit] at java.lang.reflect.Method.invoke(Native Method) [junit] at junit.framework.TestCase.runTest(TestCase.java:166) [junit] at junit.framework.TestCase.runBare(TestCase.java:140) [junit] at junit.framework.TestResult$1.protect(TestResult.java:106) [junit] at junit.framework.TestResult.runProtected(TestResult.java:124) [junit] at junit.framework.TestResult.run(TestResult.java:109) [junit] at junit.framework.TestCase.run(TestCase.java:131) [junit] at junit.framework.TestSuite.runTest(TestSuite.java:173) [junit] at junit.framework.TestSuite.run(TestSuite.java:168) [junit] at junit.framework.TestSuite.runTest(TestSuite.java:173) [junit] at junit.framework.TestSuite.run(TestSuite.java:168) [junit] at junit.textui.TestRunner.doRun(TestRunner.java:74) [junit] at junit.textui.TestRunner.start(TestRunner.java:234) [junit] at junit.textui.TestRunner.main(TestRunner.java:112) [junit] F................................... [junit] ..... [junit] Time: 16,806 [junit] There was 1 failure: [junit] 1) testEscaping(test.ojb.broker.PersistenceBrokerTest)junit.framework.Assertion FailedError: after inserting an object it should be equal to its re-read pendant expected:<Single quote 'article > but was:<Single quote 'article> [junit] at test.ojb.broker.PersistenceBrokerTest.testEscaping(PersistenceBrokerTest.jav a:494) [junit] [junit] FAILURES!!! [junit] Tests run: 46, Failures: 1, Errors: 0 [junit] I had to do some small modifications to db-setup.sql and repository.xml, attached are the modified files of version 0.7.343. MfG, Florian |
From: Mahler T. <tho...@it...> - 2002-02-14 12:23:12
|
Hi Jakob, After having a short look at the code I believe that you are right! I'll put it on my todo list! thanks, Thomas > -----Urspr=FCngliche Nachricht----- > Von: Jakob Braeuchi [mailto:jbr...@ho...] > Gesendet: Donnerstag, 14. Februar 2002 08:50 > An: Thomas Mahler > Cc: obj...@li... > Betreff: Re: [OJB-developers] Detecting and mapping null=20 > Integer values >=20 >=20 > hi thomas, >=20 > i think the method set() of PersistentField could be =20 > streamlined a lot when > using f.set(obj,value) instead of the if-else-cascade. >=20 > public void set(Object obj, Object value) throws=20 > IllegalAccessException, > IllegalArgumentException > { > boolean before =3D getField().isAccessible(); > AccessController.doPrivileged(new SetAccessibleAction()); > Field f =3D getField(); > Class type =3D f.getType(); > try > { > f.set(obj,value); > } > catch (IllegalArgumentException ex) > { > getField().setAccessible(before); > LoggerFactory.getDefaultLogger().error(ex); > LoggerFactory.getDefaultLogger().error("field: " +=20 > fieldname + ", > type: " + type); > LoggerFactory.getDefaultLogger().error("value: " +=20 > value + ", type: > " + value.getClass()); > throw ex; > } > getField().setAccessible(before); > } >=20 > jakob >=20 > ----- Original Message ----- > From: "Thomas Mahler" <tho...@ho...> > To: "Darren Syzling" <Dar...@cw...> > Cc: <obj...@li...> > Sent: Wednesday, February 13, 2002 8:09 PM > Subject: Re: [OJB-developers] Detecting and mapping null=20 > Integer values >=20 >=20 > > Hi Darren, > > > > Darren Syzling wrote: > > > > > How can I detect null values for Integer, Long, Double=20 > etc Java class > attributes > > > ? Let's say we're mapping an object which has the=20 > following attributes: > > > > > > class Test > > > { > > > Integer id; > > > String name; > > > Integer sales; > > > } > > > > > > > > > Let's assume that both name and sales can be null. When=20 > retrieving this > object > > > from the database using the PersistenceBroker the String=20 > reference will > be null > > > but the sales reference will in fact refer to an Integer=20 > object with a > zero > > > value. If zero is within the valid range how can we=20 > detect that the > value is > > > actually null. > > > > > > This appears to boil down to:=20 > JdbcAccess.getObjectFromColumn. The code > to > > > convert a string looks like: > > > > > > case Types.VARCHAR: > > > result =3D rs.getString(columnId); > > > break; > > > > > > If the string value is null getString will return a null=20 > reference. But > for > > > Integer (and other classes) the following is used: > > > > > > case Types.INTEGER: > > > result =3D new Integer(rs.getInt(columnId)); > > > break; > > > > > > > > > > > I get your point. But: how should the above code look like to = handle > > your problem correctly? I have no idea. > > If you (or somebody else) tell me how this section should=20 > look like I > > will change it! > > > > > > java.sql.ResultSet does not tell you that a column is NULL. It just > > returns a 0. Of course this is wrong. But SUN specified it this = way. > > Or am I missing something? From the java.sql.ResultSet Source: > > > > /** > > * Gets the value of the designated column in the current row > > * of this <code>ResultSet</code> object as > > * an <code>int</code> in the Java programming language. > > * > > * @param columnIndex the first column is 1, the=20 > second is 2, ... > > * @return the column value; if the value is SQL=20 > <code>NULL</code>, > > * the value returned is <code>0</code> > > * @exception SQLException if a database access error occurs > > */ > > int getInt(int columnIndex) throws SQLException; > > > > > > > getInt will return 0 for null and the an integer will be=20 > created with a > zero > > > value. > > > > > > The Conversion Strategy stuff appears too late in the day=20 > to make the > > > conversion. > > > > > > You are right, things are already on the wrong track at=20 > this point.... > > > > How is everybody else handling this or have I missed something ? > > > > > > cu, > > > > Thomas > > > > > > > > > > > > > Thanks > > > Darren > > > > > > > > > > > > > ************************************************************** > ************** > ************************************************************** > ************ > > > This e-mail has been prepared using information believed by = the > author to be > > > reliable and accurate, but Thales Information Systems=20 > Finance makes no > > > warranty as to accuracy or completeness. In particular Thales > Information > > > Systems Finance does not accept responsibility for =20 > changes made to > this > > > e-mail after it was sent. Any opinions expressed in=20 > this document are > those of > > > the author and do not necessarily reflect the opinions=20 > of the company > or its > > > affiliates. They may be subject to change without notice. > > > This e-mail, its content and any files transmitted with it = are > intended > > > solely for the addressee(s) and may be legally = privileged > and/or > > > confidential. Access by any other party is unauthorised=20 > without the > express > > > written permission of the sender. If you have received=20 > this e-mail in > error you > > > may not copy or use the contents, attachments or=20 > information in any > way. > > > Please destroy it and contact the sender via the Thales=20 > Information > Systems > > > Finance switchboard in London at +44 (0) 20 7650 0100 or=20 > via e-mail > return. > > > This message and any attachments have been scanned > > > for viruses prior to leaving the originators network. The=20 > originator > does not > > > guarantee the security of this message and will not be=20 > responsible for > any > > > damages arising from any alteration of this message by a=20 > third party or > as a > > > result of any virus being passed on. > > > > ************************************************************** > ************** > ************************************************************** > ************* > > > > > > > > > > > > _______________________________________________ > > > Objectbridge-developers mailing list > > > Obj...@li... > > >=20 https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > > > > > > > > > > > > > _______________________________________________ > Objectbridge-developers mailing list > Obj...@li... > https://lists.sourceforge.net/lists/listinfo/objectbridge-developers > _______________________________________________ Objectbridge-developers mailing list Obj...@li... https://lists.sourceforge.net/lists/listinfo/objectbridge-developers |