Getting a resource from a different jar - jar

I have two dependant projects: server and app, defined like this:
val server = project in file("server")
val app = project in file("app") dependsOn server
In server project i have a route which should return a resource "webapp/app.html", which can be found in app's project .jar.
When i run app project, i have server on a classpath and everything works fine, but when i hit the endpoint it doesn't return me the required file, though if i try to get a resource which is in server.jar i can see it. So it seems if i run app project with a server on a classpath, server can't see files from app.jar, is there any way to make it work?

Related

How dotnet.exe serves blazor web assembly files

Can someone explain or refer to a document on how a blazor web assembly app is served by dotnet.exe process?
So here is what I have done and what I know.
Scaffolded a new blazor web assembly project using the command dotnet new blazorwasm -o BlazorTest.
Ran the project using the command dotnet run and it runs as expected.
Remember I am not using the --hosted parameter to include ASP.NET Core server.
As far as my understanding goes, the output of blazor web assembly project are set of static files which run inside of a browser process. In order for these files to run inside of a browser we need a web server like kestrel/iis or a cdn to serve these files.
Now my question is, in the current setup where is that webserver or cdn present which is required to serve the files?
The dotnet CLI is reading your Properties\launchSettings.json file.
The default profile launches the app using IIS Express.
If you want use the other Kestrel launch profile that is included in the template, you can use:
dotnet run --launch-profile "BlazorTest"
Note: The "project" profile will be scaffolded as the name of the app you specified in dotnet new

Getting HTTP ERROR 404 after publishing ASP.NET application in Azure App Service with Visual Studio 2017

I have an application in ASP.NET Framework 4.6.1 that works fine when running in my local environnent using Visual Studio 2017 (version 15.7.27703.2035).
On server side, the same application is displaying an HTTP ERROR 404.
Screenshot on local environment
Screenshot on server environment
To publish the ASP.NET application, I am using the publish tool of Visual Studio and deploy everything on an App Service of Azure.
Visual studio publish tool and project architecture
I tried to use FTP deployment instead of Web Deploy with no success. I also tried manualy with FileZilla with no success.
Is it possible that some sort of action is needed when publishing a project with custom libraries?
EDIT
What I know:
dlls on server side I actualy have access to the wwwroot folder on server side: this mean I can access js, css, images, etc. But it seems that controllers, views and others folders don't exist on the server..
Libraries issus? The problem appeared when I subdivided my project with the customs libraries CrmDatabaseManager, SysaidDatabaseManager and UserInterfaceLibrary.
wwwroot inside wwwroot on server side A wwwroot folder include anoter wwwroot folder on the server; the first wwwroot folder contains all dlls, and inside it, there is another wwwroot folder containing css, js, images and etc, but no sign of controllers or views.
How I created the project I created the project GPRH
this way using ASP.NET Core 2.0 based on .NET Framework
It turns out that split the project with libraries did broke path references.
I was hard coding the path and there were no problems with that into the main project. When I splited the project with libraries, it caused an error 404.
To access a file in a libary, you need to do this manipulation first:
Right clic on the file > Properties
On Build action, choose Always
copy the file
Then specifie the path this way on the library:
var buildDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var filePath = buildDir + #"\fileName.json";
using (StreamReader r = new StreamReader(filePath))
{
// code here
}

Cannot Find Application Mobilefirst

I have deployed the war file project in context path /example
. Also i have uploaded the .wlapp and adapter in worklight console.
Where do point my application Build path to work in different server?
Should i point to /example war file path?
This is my reference on:
http://www-01.ibm.com/support/knowledgecenter/SSHSCD_6.3.0/com.ibm.worklight.deploy.doc/devref/t_transporting_the_app.html
To change the context root when building for a remote server, you need to right-click the application folder and select Run As > Build Setting and Remote Target.
In the window that will be displayed you need to set the remote server's server details. So those would be: protocol://host-or-ip:port/your-context-root.
Sounds like you should replace "your-context-root" with your own.
I have solved the problem. When war file project is installed it will became an runtime in IBM MobileFirst Platform Operations Console .
So you need to choose that runtime install .wlapp and .adapter in runtime like /example.
IBM MobileFirst Platform Operations Console
---->goofo(war file)
----->adapter
----->wlapp
---->test(war file)
----->adapter
----->wlapp

HttpAdapter to JavaServlet commnication

Initially we had the application server as a separate one. The communication to the Application Server from worklight servers using adapters. But currently we are moving the Application Server code to the Worklight's Server folder. We are able to call the java class (Simple java class not servlets) using HTTPAdapter. But it is difficult to communicate with the servlet (which is included in the server folder) using HTTPAdapter. Plese provide any solution?
If I understand correctly, you have put some servlet classes in your Worklight server folder. As they are Java classes they are now visible to your adapters. However servlets to be true servlets must be deployed to a JEE servlet engine, with appropriate configuration. You can deploy Servlets (in a WAR file of their own) as a separate JEE application on the same server as Worklight, but you cannot package them inside Worklight itself.
edited in response to your clarification:
You want to consolidate your servlet application, which is providing data accessed via the worklight adapter onto the same server instance as the worklight server. The Worklight Server is actually a JEE application deployed to one of the supported JEE servers, usually WebSphere Liberty which is supplied with Worklight, and the Worklight Server is in fact packaged as a WAR file. Your Data Provider servlet will also be packaged as a WAR file, all you need to do is deploy that WAR to the Liberty server you are currently using for worklight.
If you are doing this is development in Worklight Studio you can find the relevent folders by looking under "Worklight Development Server". You can drop the WAR into the apps folder and if necessary edit the server.xml to add any extra configuration:
WorklightServerConfig/servers/worklight/server.xml
See: http://www-01.ibm.com/support/knowledgecenter/SSCKBL_8.5.5/com.ibm.websphere.wlp.nd.doc/ae/twlp_dep_war.html
a second edit to try to explain again.
The Worklight Project represents your application, when you deploy to the Worklight Server a WAR file is created let's call this MyApp.WAR, that can be deployed to a WebSphere Application Server, inside Worklight Studio you are automatically given a WebSphere Liberty Profile. That Liberty Profile's configuration can be seen in the Project Worklight Development Server. Key Idea here you have one App Server that Liberty Profile, and you deploy the MyApp.WAR file to create what we usually call the Worklight server, it's the MyApp.WaR that is serving your Worklight console. That WAR file is derived from the contents of your project's server folder, this folder's name is a little misleading it's not the "server" itself it's your project-specific WAR information.
Now in addition you want to run a Servlet you already have packaged as a WAR file, let's call this Data.WAR. The key point is that you need to run Data.WAR on the Worklight Developmennt Server, the Liberty Profile. You are not including this DATA.WAR file into your project's server folder, that would effectively put DATA.war inside MyApp.WAR. Instead all you need to do is put Data.WAR in the Worklight Developmennt Server's apps folder and adjust the server.xml.
So: Step 1. Get Data.WAR running in the Development Server. Verify that from a browser you can call your expected servlet. Note the URL that works. Do not make any attempt to use your adapter until you have verified this.
Step 2. Adjust you adapter to call that URL.

Deploying More Jar files (Own) in server

I am new to deployment and development of web applications.
Suppose I create three jar files and deploy them on a Tomcat server. I use maven to install the jar file and to deploy.
How is it possible to call a method in another jar file?
For example:
I developed a simple application in mytwitter.jar.
Then, I create myapp.jar, where one of the classes needs to call a method in mytwitter.jar.
Do I first deploy mytwitter.jar to the server and myapp.jar later?
You package all of the JARs you need (yours and 3rd party alike) into a WAR file which is what gets deployed to the Tomcat server. So in your maven config you likely already have dependencies configured for things like the twitter API and other packages. Just add your own JARs in there as well and then your code has access to it like anything else.

Resources