ah, the fun of writting cf java tags. After you make a change and recompile,
you'll need to cycle the service to re-read the class file...

unless there is a better way that I don't know about.


Rob

http://treebeard.sourceforge.net
http://ruinworld.sourceforge.net
Scientia Est Potentia

-----Original Message-----
From: Dick Applebaum [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, November 26, 2002 2:21 PM
To: CF-Talk
Subject: Re: Java in CF (CFMX)


Joe

I  have been modifing with your Java code to return tables and columns
and I ran into a
weird situation.

for convenience, I put the ,java file in WEB-INF/classes

I recompile the program and get a class file

I run the CF template, but get the old version of the class file

I even deleted the class file -- something is being cached, somewhere
-- Where?

TIA

Dick




On Tuesday, November 26, 2002, at 01:35 PM, Joe Eugene wrote:

> Dick
>
> No problem, i got the same solution working with MM,MS-SQL and Oracle
> drivers
> without any problem.
>> You, likely, saved me several hours of
>> frustration.
> Now the ideal solution would be to return Complex
> Objects/Types(Structs,ResultSets) back to CFMX. Havent had a chance to
> play
> with Structs(CFMX-Java) compatibility.
>
>> Is there value to the Java developer (new or
>> experienced) to inline
>> code -- Yes,
>
> I understand your need. A while ago, we looked at the generated Java
> code(Real
> Ugly!) from a *.cfm page. A lot of ugly wrappers coverting loose *.cfm
> TYPES
> to strong Java Types..(Result..Slow pages)(Topic Jsp vs Cfm).
>
> InLine Java Code.
> If this ever happens, ideally.. CFMX complier should create a helper
> class
> file and let Java Complier, compile it like a Jsp page.. this would be
> excellent.. but again IS'nt CfObject doing the same thing?(seperating
> the
> helper/model class from presentation)...Am trying to relate to "Inline
> Java"..
> So what overall advantage do we get with Inline Java? Any
> Performance...?
> other than coding between CF/Java in templates?
>
> I am not against InLine Java.. just trying to understand the Mechanics.
>
> Joe
>
> On Tue, 26 Nov 2002 07:10:11 -0800 Dick Applebaum <[EMAIL PROTECTED]>
> wrote:
>
>> Joe
>>
>> Your example, does, in fact work.
>>
>> Of course, I needed to modify the Java code to
>> specify a different
>> database --
>> none of the MS databases appear to work on Mac
>> OS X (or and non-win
>> platform) :)
>>
>> This is enough to get me started -- I will add
>> the flexibility to the
>> interface so it
>> will work with any JDBC driver, and any
>> MetaData request.
>>
>> Thanks
>>
>> I have never written a wrapper for a Java
>> program & it helps to start
>> with a
>> working example, and concise instructions.
>>
>> You, likely, saved me several hours of
>> frustration.
>>
>> I think that implementing and deploying this
>> example is a good
>> illustration of the
>> value of inline Java.
>>
>> Someone new to Java, like myself, could take
>> your example and drop it
>> into a simpleCF template,
>> between  tags.  Then they could add the CFML
>> portion in the
>> same template. More likely,
>> you would have provided a complete, standalone
>> CF Template with the
>> Java code, inline.
>>
>> Then they could save and test the template
>> without concern for:
>>
>>     1) Separating your file into its Java and
>> CFML component parts.
>>
>>     2) Where to put the Java source
>>
>>     3) How to compile the Java class
>>
>>     4) Which Java compiler options to use and
>> their proper settings --
>>          things such as:
>>
>>         Usage: javac
>>         where possible options include:
>>            -g                        Generate
>> all debugging info
>>            -g:none                   Generate
>> no debugging info
>>            -g:{lines,vars,source}    Generate
>> only some debugging info
>>            -O                        Optimize;
>> may hinder debugging or
>> enlarge class file
>>            -nowarn                   Generate
>> no warnings
>>            -verbose                  Output
>> messages about what the
>> compiler is doing
>>            -deprecation              Output
>> source locations where
>> deprecated APIs are used
>>            -classpath          Specify where to
>> find user class
>> files
>>            -sourcepath         Specify where to
>> find input source
>> files
>>            -bootclasspath      Override
>> location of bootstrap
>> class files
>>            -extdirs            Override
>> location of installed
>> extensions
>>            -d             Specify where to
>> place generated
>> class files
>>            -encoding       Specify character
>> encoding used by
>> source files
>>            -target          Generate class
>> files for specific
>> VM version
>>
>>     5) Figuring out the command line interface
>> or some Java IDE, just to
>> be able to compile the Java program.
>>
>>     6) Where to put the Java class
>>
>>     7) Where to get a Java compiler if one
>> isn't installed on their
>> platform (Mac OS X comes,
>>         standard, with a JDK, but many
>> platforms do not).
>>
>> Sure, these are things that the new Java person
>> will need to learn
>> eventually.  But, is it necessary to
>> overload the new Java user with all this
>> minutiae, just to try a simple
>> Java example -- I think not!
>>
>> Is there value to the Java developer (new or
>> experienced) to inline
>> code -- Yes, I've noted some
>> advantages to the lay person.  But, Joe, who is
>> experienced with Java,
>> could have benefitted from
>> inline Java too.  I suspect he would have saved
>> time preparing/testing
>> his example and the instructions
>> how to deploy it :
>>
>>     1) He, simply, could have provided a single
>> CF template with the
>> Java inline; rather than a Java
>>          program and a separate CF template.
>>
>>     2) He could have avoided typing the
>> instructions to compile and
>>          deploy the Java program
>>
>>     3) The flow of the example, likely, would
>> be better, better
>> understood, and easier
>>          to explain and document within the
>> code (both CF and Java
>> Comments)
>>
>>     4) He'd have a single file, a complete
>> example, with no special
>> instructions --
>>          Just "Save it and Run it" as you would
>> any other CF template.
>>
>>
>> Is there significant [enough] value, that MM
>> should consider
>> implementing inline Java --
>> I think so -- what it boils down to is this:
>> inline Java is an
>> improved interface to
>> many Java programs -- much the way that  (and
>> the associated
>> , , etc.) tags
>> are an improvement to many SQL databases.
>> Here are some advantages to
>> MM.
>>
>>     1) The CFMX product could have another
>> productivity advantage for
>> developers, and
>>          resellers... hmm... I wonder if IBM
>> could use this feature....
>>
>>    2) Macromedia could more easily, and more
>> effectively include many
>> Java examples
>>        in the code they distribute,
>>
>>    3) Inline Java could facilitate writing,
>> testing  and documenting
>> wrappers for many
>>        Java programs (whether deployed inline
>> or not).
>>
>>    4) It could be easier to reconcile Java
>> constructs of strong typing,
>> nulls, etc, with the absence
>>         these constructs in CFML.  In fact.
>> inline Java, could provide a
>> very nice means to help
>>         pass data between CFML and Java --
>> something like
>> where you could
>>         specify typing, nulls, etc. in a way
>> meaningful to both CFML and
>> Java.
>>
>>    5) If MM were to implement , they could
>> delay (or
>> postpone indefinitly) the
>>        request to add these features to CF
>> (requiring major
>> reengineering of CF, according to some).
>>        this could be a placeholder, preserving
>> MM's options, while
>> deferring revision of CFML!
>>
>>    6) If MM did decide to add typing, nulls,
>> etc to a later version
>> CFML, they would have an existing standard
>>         (the cfjavaparam placeholder) that
>> would make it easier to
>> implement compatibility.
>>
>> OK, I was careful to use words like "many,
>> could, etc.".  Do the
>> benefits of inline Java apply to all -- Nah!
>>
>> But, here is a feature that "could" be of use
>> to "many" -- Macromedia,
>> Resellers, Developers, end users,
>>
>> As Phil Costa said at the beginning of this
>> thread, MM did consider it,
>> and it wasn't a "cut and dried" decision.
>>
>> It may be worth reconsidering!
>>
>> Dick
>>
>> P.S. Thanks, again, Joe!
>>
>>
>>
>>
>>
>>
>>
>>
>> On Monday, November 25, 2002, at 02:32 PM, Joe
>> Eugene wrote:
>>
>>> Dick,
>>> Here is an Example that works with CFMX. The
>> Java file should be
>>> compiled
>>> under WEB-INF/classes/
>>> and you can invoke it with CFObject. Note i
>> am using Macromedia
>>> drivers to
>>> connect to Sql-Server.
>>> This is rough sketch..if you want.. i can
>> improvise this later..to be
>>> generic.
>>> Dont forget to substitute your Database
>> Name,server name, userid and
>>> password.
>>> The method call returns a list of table
>> names.
>>>
>>> /*Java File*/
>>>
>>> import java.sql.*;
>>> import java.util.*;
>>>
>>> public class MetaData{
>>>
>>>  String
>> driverName="macromedia.jdbc.MacromediaDriver";
>>>  String
>> url="jdbc:macromedia:sqlserver://SqlServer:1433";
>>>  String userid="YourUserid";
>>>  String pwd="YourPassword";
>>>  private String cat,schPattern,tblNPattern;
>>>  private String tblTypes[];
>>>
>>>  public void setParms(String c,String s,
>> String t){
>>>  if(c.equalsIgnoreCase("null")) cat=null;
>> else cat=c;
>>>  if(s.equalsIgnoreCase("null"))
>> schPattern=null; else schPattern=s;
>>>  if(t.equalsIgnoreCase("null"))
>> tblNPattern=null; else tblNPattern=t;
>>>  tblTypes=null;
>>>  }
>>> /*String
>> driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver";
>>>  //String
>> url="jdbc:microsoft:sqlserver://SqlServer:1433";
>>> */
>>>
>>>  public String getTablesOnly(){
>>>   StringBuffer sb = new StringBuffer();
>>>   try{
>>>   Class.forName(driverName);
>>>   Connection con =
>> DriverManager.getConnection(url,userid,pwd);
>>>   DatabaseMetaData md = con.getMetaData();
>>>
>> //System.out.println(md.getSQLKeywords()+"\n\n");
>>>
>> //System.out.println(md.getNumericFunctions());
>>>
>>>   //String tbTypes[]={"TABLE","User"};
>>>   ResultSet rs =
>> md.getTables(cat,schPattern,tblNPattern,tblTypes);
>>>
>>>   while(rs.next()){
>>>   sb.append(rs.getString("TABLE_NAME")+',');
>>>   }
>>>   rs.close();
>>>   con.close();
>>>   return sb.toString();
>>>    }catch(Exception e){
>>>     return e.toString();
>>>   }
>>>
>>>  }//end getTablesOnly
>>>
>>> /*
>>>  public static void main(String argv[]){
>>>   MetaData m = new MetaData();
>>>   System.out.println(m.getTablesOnly());
>>>  }
>>> */
>>> }
>>>
>>>
>>>
>>>  Parm1:Catalog
>>> Parm2:SchemaPattern
>>> Parm3:tblNPattern
>>> I am not currently passsing any types.. but u
>> can add them
>>> --->
>>>
>>>
>>>
>>> Hope this gives you an idea.
>>> Joe
>>>
>>>
>>>
>>> On Mon, 25 Nov 2002 10:56:57 -0800 Dick
>> Applebaum
>>> wrote:
>>>
>>>> Joe
>>>>
>>>> Below is the Java source, originally caalled
>>>> DBViewer.
>>>>
>>>> This is working code that I modified to use
>> the
>>>> CFMX cfsnippets db (The
>>>> PointBase
>>>> database shipped with the Linux distro).
>>>>
>>>> I want to accomplish the same thing within
>>>> CFMX, and generalize it a
>>>> bit so it will
>>>> work with any JDBC driver and database,
>>>> remote or local, on any platform.
>>>>
>>>> For remote dbs, there will be a stub program
>>>> that determines the
>>>> platform, CF
>>>> version, etc. and Uses COM objects or the
>> Java
>>>> interface as needed.
>>>> Requests and data are exchanged via WDDX
>>>> packets.
>>>>
>>>> For local dbs the function could be included
>>>> inline (for performance)
>>>> or via the
>>>> stub (for convenience)
>>>>
>>>> The problem statements are shown at:  30,
>> 38,
>>>> and 45.
>>>>
>>>> It is fairly easy to program equivalent CF
>>>> code, but you can't pass
>>>> nulls from CF.
>>>>
>>>> Given more time, I would probably do this:
>>>>
>>>>    Use a Java program (similar to this) to
>> do
>>>> the actual manipulation
>>>>    of the JDBC driver.
>>>>
>>>>    Use a CF routine to interface the Java
>>>> program:  providing input
>>>>    paramaters for the desired db request;
>> and
>>>> presentation of the
>>>>    results
>>>>
>>>>    Use an alias (such as 'MyNull'), to
>> exchange
>>>> psuedo nulls between
>>>>    CF and Java, as necessary
>>>>
>>>> Any help will be greatly appreciated.
>>>>
>>>> TIA
>>>>
>>>> Dick
>>>>
>>>>
>>>>
>>>> 1 //      public abstract ResultSet
>>>> getIndexInfo(String catalog, String
>>>> schema,        String table, boolean unique,
>>>> boolean approximate)
>>>> throws SQLException;
>>>> 2 //      public abstract ResultSet
>>>> getColumns(String catalog, String
>>>> schemaPattern, String tableNamePattern,
>> String
>>>> columnNamePattern)
>>>> throws SQLException;
>>>>
>>>> 3
>>>> 4 import java.sql.*;
>>>> 5 import java.util.StringTokenizer;
>>>>
>>>> 6 public class DBViewerPB {
>>>>
>>>> 7   final static String jdbcURL =
>>>>
>> "jdbc:pointbase:cfsnippets,database.home=/opt/coldfusionmx/db";
>>>> 8   final static String jdbcDriver =
>>>> "com.pointbase.jdbc.jdbcUniversalDriver";
>>>> 9   final static String username =
>> "PBPUBLIC";
>>>> 10   final static String password =
>> "PBPUBLIC";
>>>>
>>>> 11   public static void
>> main(java.lang.String[]
>>>> args) {
>>>>
>>>> 12     System.out.println("--- Database
>> Viewer
>>>> ---");
>>>> 13
>>>> 14     try {
>>>> 15       Class.forName(jdbcDriver);
>>>> 16       Connection con =
>>>> DriverManager.getConnection(jdbcURL,
>>>> username, password);
>>>>
>>>> 17       DatabaseMetaData dbmd =
>>>> con.getMetaData(  );
>>>>
>>>> 18       System.out.println("Driver Name: "
>> +
>>>> dbmd.getDriverName(  ));
>>>> 19       System.out.println("Database
>> Product:
>>>> " +
>>>> dbmd.getDatabaseProductName(  ));
>>>> 20       System.out.println("Database
>> Version:
>>>> " +
>>>> dbmd.getDatabaseProductVersion(  ));
>>>> 21       System.out.println("SQL Keywords
>>>> Supported:");
>>>> 22       //StringTokenizer st = new
>>>> StringTokenizer(dbmd.getSQLKeywords(  ),
>> ",");
>>>> 23       //while(st.hasMoreTokens(  ))
>>>> 24       //  System.out.println(" " +
>>>> st.nextToken(  ));
>>>> 25
>>>> 26       // Get a ResultSet that contains
>> all
>>>> of the tables in this
>>>> database
>>>> 27       // We specify a table_type of
>> "TABLE"
>>>> to prevent seeing system
>>>> tables,
>>>> 28       // views and so forth
>>>> 29       String[] tableTypes = { "TABLE" };
>>>> 30       ResultSet allTables =
>>>> dbmd.getTables(null,null,null,tableTypes);
>>>> 31       while(allTables.next(  )) {
>>>> 32         String table_name =
>>>> allTables.getString("TABLE_NAME");
>>>> 33         System.out.println("Table Name: "
>> +
>>>> table_name);
>>>> 34         System.out.println("Table Type:
>> " +
>>>>
>>>> allTables.getString("TABLE_TYPE"));
>>>> 35         System.out.println("Indexes: ");
>>>>
>>>> 36         // Get a list of all the columns
>> for
>>>> this table
>>>> 37         ResultSet columnList =
>>>> 38
>>>> dbmd.getColumns(null,null,table_name,null);
>>>> 39         while(columnList.next(  )) {
>>>> 40           System.out.println(" Column
>> Name:
>>>>
>>>> "+columnList.getString("COLUMN_NAME"));
>>>> 41         }
>>>> 42         columnList.close(  );
>>>>
>>>> 43         // Get a list of all the indexes
>> for
>>>> this table
>>>> 44         ResultSet indexList =
>>>> 45
>>>>
>> dbmd.getIndexInfo(null,null,table_name,false,false);
>>>> 46         while(indexList.next(  )) {
>>>> 47           System.out.println(" Index
>> Name:
>>>> "+indexList.getString("INDEX_NAME"));
>>>> 48           System.out.println(" Column
>> Name:
>>>>
>>>> "+indexList.getString("COLUMN_NAME"));
>>>> 49         }
>>>> 50         indexList.close(  );
>>>> 51       }
>>>>
>>>> 52       allTables.close(  );
>>>> 53       con.close(  );
>>>> 54     }
>>>> 55     catch (ClassNotFoundException e) {
>>>> 56       System.out.println("Unable to load
>>>> database driver class");
>>>> 57     }
>>>> 58     catch (SQLException e) {
>>>> 59       System.out.println("SQL Exception:
>> " +
>>>> e.getMessage(  ));
>>>> 60     }
>>>> 61   }
>>>> 62 }
>>>>
>>>>
>>>> On Monday, November 25, 2002, at 08:42 AM,
>> Joe
>>>> Eugene wrote:
>>>>
>>>>> Dick,
>>>>> Can we see your code? Cant you have a
>> method
>>>> that converts CF String
>>>>> "null" to
>>>>> Java String=null?
>>>>>
>>>>>> tried to invoke it with cfobject.  We
>> could
>>>> not
>>>>>> make the interface work
>>>>>> because we could not pass Nulls between CF
>>>> and
>>>>>> Java.
>>>>>
>>>>> Here is an example
>>>>>
>>>>> public class StringType{
>>>>>   private String str;
>>>>>   public String getString(String s){
>>>>>    String val="";
>>>>>    str=s;
>>>>>    if(str.equals("null")){
>>>>>    val="Your String was null, setting to
>> null
>>>>  now";
>>>>>    str = null;
>>>>>    val= val+ " " +"Now Java value is : "+
>> str
>>>> +"";
>>>>>    }
>>>>>    return val;
>>>>>   }
>>>>> }
>>>>>
>>>>> You can invoke it with
>>>>>  type="JAVA">
>>>>>
>>>>> #chkNull.getString("null")#
>>>>>
>>>>>
>>>>> if you can post your code, we can try
>> figure
>>>> it out. Let me know.
>>>>>
>>>>> Joe
>>>>>
>>>>> On Mon, 25 Nov 2002 06:54:03 -0800 Dick
>>>> Applebaum
>>>>> wrote:
>>>>>
>>>>>> On Monday, November 25, 2002, at 01:43 AM,
>>>>>> Jochem van Dieten wrote:
>>>>>>
>>>>>>> Quoting Dave Carabetta :
>>>>>>>>
>>>>>>>> While I understand this isn't a feature
>>>> that
>>>>>> everybody would use, I
>>>>>>>> would personally like to see MM focus on
>>>>>> encapsulating some more Java
>>>>>>>> features into easy-to-use black-box CF
>>>> tags
>>>>>> rather than having to code
>>>>>>>> my own Java.
>>>>>>>
>>>>>>> I agree. For instance, it would be far
>>>> better
>>>>>> if CF had a tag to get at
>>>>>>> the DatabaseMetaData interface instead of
>>>>>> making it marginally easier
>>>>>>> to
>>>>>>> write it yourself by allowing inline
>> Java.
>>>>>>
>>>>>> This is an excellent example & I expect
>> that
>>>>>> this will be one of the
>>>>>> most-requested capabilities -- to be able
>> to
>>>>>> get DatabaseMetaData into
>>>>>> CF.  I tried to do this, with help from
>> Sean
>>>>>> Corfield -- without
>>>>>> success. I found a working Java program
>> that
>>>>>> extracts metadata, and
>>>>>> tried to invoke it with cfobject.  We
>> could
>>>> not
>>>>>> make the interface work
>>>>>> because we could not pass Nulls between CF
>>>> and
>>>>>> Java.
>>>>>>
>>>>>> This is for a general-purpose developer
>>>> utility
>>>>>> that I use to
>>>>>> manipulate databases.  It is especially
>>>> useful
>>>>>> on remote (shared) sites
>>>>>> where  you don't have administrative
>>>>>> privileges.
>>>>>>
>>>>>> I have been doing this a long time with CF
>>>> 4.5
>>>>>> and CF 5 on win
>>>>>> platforms using cfobject to manipulate COM
>>>>>> objects.
>>>>>>
>>>>>> But, I would like to be able to do the
>> same
>>>>>> thing with CFMX on
>>>>>> non-windows platforms.
>>>>>>
>>>>>> Here's the difficulty:
>>>>>>
>>>>>> With CFMX:
>>>>>>
>>>>>> I can get at the equivalent of
>>>> DatabaseMetaData
>>>>>> on a remote windows
>>>>>> box, using cfobject and COM objects.
>>>>>>
>>>>>> But, I can't get at the DatabaseMetaData
>> on
>>>> my
>>>>>> local Unix (Mac OS X)
>>>>>> developer machine -- you can't use COM
>>>> objects
>>>>>> and can't pass the Nulls
>>>>>> to the Java program that gets the
>>>>>> DatabaseMetaData.
>>>>>>
>>>>>> I suppose there is a way to circumvent the
>>>> need
>>>>>> to pass Nulls between
>>>>>> CF and Java, but I have not had time to
>>>>>> investigate this.
>>>>>>
>>>>>>> And especially from the point of view of
>>>>>> security built-in tags are
>>>>>>> better. All those JSP tags and Java
>> classes
>>>>>> are nice, but on a shared
>>>>>>> server you need to disable them anyway
>>>>>> because the same mechanism that
>>>>>>> is used to access them can be used to
>> break
>>>>>> out of the sandbox.
>>>>>>>
>>>>>>
>>>>>> Is this true for CFMXJ2ee on JRun,
>> Websphere
>>>> or
>>>>>> whatever?
>>>>>>
>>>>>> I thought that one of the advantages of
>>>>>> CFMXJ2ee on a J2ee-compliant
>>>>>> app server, is the ability to interoperate
>>>>>> between CF and Java programs.
>>>>>>
>>>>>> Will this be possible with Java access
>>>>>> disabled?
>>>>>>
>>>>>> For the DatabaseMetaData example, I would
>>>>>> prefer the CF tag approach.
>>>>>>
>>>>>> But, I still think it is valid to use
>> Java,
>>>>>> where warranted, on a
>>>>>> developer machine.
>>>>>>
>>>>>>
>>>>>> Dick
>>>>>>
>>>>>>
>>>>>>> Jochem
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
Subscription: 
http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Your ad could be here. Monies from ads go to support these lists and provide more 
resources for the community. http://www.fusionauthority.com/ads.cfm

Reply via email to