<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The idea would be have a single class factory in the jar which creates all your X3D objects, so you would call into the factory instead of directly calling new on the constructor.   Then you would load the class factory with the custom URLClassLoader which has loaded the X3DJSAIL*.jar from over the network.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Something to think about, maybe create a separate X3dToJavaFactory.xslt for those who want to use the network jar.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hmm.  It might now be too hard to change my JavaSerializer to do something like this.  Hmm.  Hmm.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Or maybe add the Jar to the system classloader path dynamically.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hmm.  Hmm.  How to keep people up to date with the latest.  Hmm. Hmm.   Can you put https:// on the classpath? You can with webstart.  Maybe we should do a webstart solution?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Something to think about.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Monday, April 23, 2018 1:27 AM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>RE: Idea for X3dToJava.xslt</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Looks like this works for a single class, and probably some kind of RMI.  Good luck if you decide to do something like this.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>import java.net.*;<o:p></o:p></p><p class=MsoNormal>import java.lang.reflect.*;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>public class LocalMUDClient extends URLClassLoader {<o:p></o:p></p><p class=MsoNormal>        static public void main(String args[]) {<o:p></o:p></p><p class=MsoNormal>                try {<o:p></o:p></p><p class=MsoNormal>                        String nick = "John";<o:p></o:p></p><p class=MsoNormal>                        if (args.length > 0) {<o:p></o:p></p><p class=MsoNormal>                                nick = args[0];<o:p></o:p></p><p class=MsoNormal>                        }<o:p></o:p></p><p class=MsoNormal>                        String room = "rmi://localhost/Generic_Room";<o:p></o:p></p><p class=MsoNormal>                        if (args.length > 1) {<o:p></o:p></p><p class=MsoNormal>                                room = args[1];<o:p></o:p></p><p class=MsoNormal>                        }<o:p></o:p></p><p class=MsoNormal>                        String url = "jar:http://localhost/webstart/chat/icbmc.jar!/";<o:p></o:p></p><p class=MsoNormal>                        if (args.length > 2) {<o:p></o:p></p><p class=MsoNormal>                                url = args[2];<o:p></o:p></p><p class=MsoNormal>                        }<o:p></o:p></p><p class=MsoNormal>                        String args2[] = new String[1];<o:p></o:p></p><p class=MsoNormal>                        // String args2[] = new String[2];<o:p></o:p></p><p class=MsoNormal>                        args2[0] = nick;<o:p></o:p></p><p class=MsoNormal>                        // args2[1] = room;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                        URL urls[] = new URL[1];<o:p></o:p></p><p class=MsoNormal>                        urls[0] = new URL(url);<o:p></o:p></p><p class=MsoNormal>                        LocalMUDClient j = new LocalMUDClient(urls);<o:p></o:p></p><p class=MsoNormal>                        Class c = j.findClass("icbm.MUDClient");<o:p></o:p></p><p class=MsoNormal>                        System.err.println(c.getName());<o:p></o:p></p><p class=MsoNormal>                        Class params[] = new Class[1];<o:p></o:p></p><p class=MsoNormal>                        params[0] = args2.getClass();<o:p></o:p></p><p class=MsoNormal>                        Constructor cons = c.getConstructor(params);<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>                        Object objs[] = new Object[1];<o:p></o:p></p><p class=MsoNormal>                        objs[0] = args2;<o:p></o:p></p><p class=MsoNormal>                        cons.newInstance(objs);<o:p></o:p></p><p class=MsoNormal>                } catch (Exception e) {<o:p></o:p></p><p class=MsoNormal>                        e.printStackTrace();<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>        public LocalMUDClient(URL urls[]) {<o:p></o:p></p><p class=MsoNormal>                super(urls);<o:p></o:p></p><p class=MsoNormal>        }<o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Monday, April 23, 2018 1:09 AM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Don Brutzman</a>; <a href="mailto:x3d-public@web3d.org">x3d-public@web3d.org</a><br><b>Subject: </b>Idea for X3dToJava.xslt<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Perhaps the Java program could download the X3DJSAIL*.jar from over the network, so one is always up to date?  I’ve got some examples of that.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>